精華區beta Programming 關於我們 聯絡資訊
> ==>發信人: omni.bbs@bbs.nhcue.edu.tw (愛愉), 信區: programming > ※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言: > > > OO 有非循序特性嗎? > > fun_a 與 fun_b 運作到相同的 a,b,c , 這兩者是有關係的, 因此置於同一個 > > class A 之下. 因為, 這裡只有一個 Class Object , 即使是多機也只能擺到 > > 其中一機上, 達到 Class Object ID 唯一的要求, 要 invoke class Object > > A 內的 method fun_a 或 fun_b, 這個單一的 Class Object 只會做完一次 > > invoking 才會再接受下一個 invoking . > > 目前的 OOPL 不是 CHLL , 所以在 Class Object 內的 method 執行一直都是 > > 循序的. > > 但如果分寫兩個 Class 就會有 A1 A2 兩個名稱, 多機的 Distributed > > Object 才有可能會將 A1 A2 分散在不同機器上, 這時候的 invoking 結果就 > > 變成 B1.fun_a B2.fun_b 對這個例就變成 B1.a B2.a > 其實programming 的思意就按時序做出安排. > 做麼事先做, 什麼事後做, 就看編排的人了. > 所以凡是programming就是循序而做. 這個凡是就太武斷了, Concurrent Programming 還會考慮那些事可以不必循序做. > 安排時要預計很多變化, 這就是需要假設不同情況下, 做出多個不同的應變的編排. > 這些是基本, 無論用什麼模式, 什麼語言都是一樣. > => programming的基本就是按程序做, 遇變化會執行其他應變程序. > Object-oriented只是模仿現實生活, 一件物件有特性, 狀態和功能. > OO programming之下不會超越programming範圍. 他一樣是按次序執行程序. > 一樣是按次序執行各個物件的程序. Object 有一個特點就是 Object 的內部 method 幾乎都會用到 Object 內其他 method 也會用到的 data , 所以 Object 內部是不能隨意交錯或平行 access data 的, 最簡 單正確的用法就是循序. 但不同 Class Object 之間並未限制非得要強以為序的循序, 所以各個不同的 Class Object 是可以分散處理的. > => OO programming也不過是programming > 再說到parallel/distributed/cluster programming. > 首先, 你上面說的問題, 無論是Object oriented 還是非OO都會遇上. > 非OO只不過是放在global space或特定space而已. 能不能放在那裡, 效果可就會相差很遠了. > 你所說的含糊, 只不過是定義程序是有含糊, 是可以定一個更清楚的程序. 很抱歉, 我沒有提 "含糊" 這個字眼. 上面的 Class A1, A2 即使內容都相同, 但分開在不同的 class object 就會是兩 個 name space , 非循序的分散執行就會分別得到不同的 " 兩份 result " , 不 會有先做後做覆蓋誰的問題. > 令到同時執行的程序, 會做出想要的結果. > 分散不同的處理器執行的程序, 總會有作出總結的程序, 這個總程序會等候各個 > 完成才作出總結. 而不會雜亂無章. > 在寫distribute programming時, 對於那些是sharing data, 那些是local copy, > 是有清楚規定, 怎去access sharing data, 要不要locking都要考慮. > 這並不關乎是不是object-oriented 與否, 而是編者對這類programming理念是否清晰. ====== 以上說的 data lock , access 都是得正確的思考, 但會不會全堆成一團而弄混了 ? 如果用現在的 sequential programming 寫好的程式, 在所有 data 集成一堆擺的 情況下, 要分散處理是很難的, 幾乎都要有 source program 參考才能弄得清, 而 且還需要重新撿查共用的資料, 重寫程式. 使用 OOPL 寫的程式編譯完成後, Class Object 是自成一堆, 所以 Distributed Object 可以散開擺在不同的機器. 在改用適當的 remote method invoking 機制 下, 原有單機下跑的 OOPL 程式就能 "不必重寫" 就能正確的分散開來執行. 再假設分散在某台機器上的某個 Class Object 要擴充相關的功能, 因此要修改其 method 或增添時, 只要針對這台機器上的 Class Object 更改就可以了, 幾乎可 以不用參考其他機器上的 source , 也不用重新編譯其他機器上的 class object 只要單獨修改這個 Class Object 就能跑. 這些現象其實都跟網路分散式系統對分散的硬體設備可以個別替換, 更新擴充, 分 散平行處理的現象是相同的. 而傳統的大型主機是 CPU 與 I/O Processors 都共 用同一個大 Memory , 其架構有如連體嬰, 是牽一髮就會動全身的. 網路分散的硬體就是能很簡單的讓不相關的硬體平行處理, 也能獨立的維護替換. 但共用記憶體的 多處理機/單機多線程 就要很複雜難懂的 OS 同步機制才能平行 /併行處理. 要替換某個新組件就變成幾乎是重換一台新主機會比較省事了. -- ◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 140.115.6.234