> ==>發信人: 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