精華區beta Programming 關於我們 聯絡資訊
> ==>發信人: sealoe@kkcity.com.tw (), 信區: programming > class A > { > int a,b,c; > int a1,b1,c1; > fun_a(){ > a = b+c; //快指令 > } > fun_b(){ > a = b*c; //慢的指令 > } > fun_c(){ > a1 = b1+c1; > } > } > main(){ > A B; > B.b = 1; > B.c = 2; > B.fun_a(); > B.fun_b(); > B.fun_c(); > } > 如果是OO並不知道最後a 是哪個 fun_a 或是fun_b的結果 出來不可與其的答案 > 但是因為目前的程式編譯器幫你處理好 > 所以會先執行fun_a 在循序的執行fun_b > a就會是fun_b的結果 > 也就是編譯器不幫你處理的話 可能因為OO非循序的特性出錯 > 不知道我理解的對不對? 在一個 Object 內的 method 是循序的. 即使是有 CHLL 支援, 同一個 object 內的 data 如果是由 object內的 不同 method 所共用, 只要有共用關係存在, fun_a fun_b 就不會被允許以併行或平行方式執行. 這個例子的 fun_c 用的data 是 a1,b1,c1 , 跟 fun_a 用到的 a,b,c data 是不 相關的, 如果是有 CHLL 支援, fun_c 跟 fun_a 可以讓 shared memory multi- processor 的單機在執行這個 class object 內的兩個 method 時, 可以讓不同 CPU 對應不同的 thread/process 來平行處理. 但要這樣做一定得有 CHLL 的支 援才能讓連續兩個 invoking 可不等結果傳回就能同時發出, 也能同時接受多個 invoke 同時讓無關的 method 平行處理. 嚴格說, 就 OO 的概念, 毫無關係的 method 與 data 組是不應該擺在一起的, 所以 fun_c 與 a1 b1 c1 是一個 Class Object , 而 fun_a 與 a b c 是另一 個 Class object. 在 Distributed Object 下 , 不同的 Class Object 可以 分散在不同的單機上各別被 "同時" invoking 形成平行處理. -- ◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 140.115.6.234