併發系列64章 並行程式設計 第五章

2022-03-02 10:33:04 字數 2212 閱讀 2262

並行程式設計,先來看下概念。並行程式設計用於分解計算密集型的任務片段,並將它們分配給多個執行緒。

劃重點,這個是計算密集型的東西,而不是io密集型。也就是說切割成的片段用於計算使用cpu計算,而不是記憶體。

如果乙個操作時記憶體密集型那麼並行處理是會起反的效果的,因為io意味著等待。原本等待一段的,現在每一段都要等待。

class program

private static void rotatematrices(listintlist)

); }

}

結果是:

上述得出乙個結論,不是說並行的每乙個都是在不同執行緒中,而是說並行的任務可能在同一執行緒。

注意:因為可能在不同執行緒中,對於公共變數注意鎖。

上述並行中,現在有乙個需求就是,讓他們並行加上某個數,並得出他們的結果。

class program

private static int rotatematrices(listintlist)

, localfinally: localresult =>});

return result;

}}

localinit: () => 1 設定了為1,然後並行執行了body部分,最後得出結果相加。

從上面可以得出,並行程式設計其實是阻塞的。如果要達到更好的效果,需要結合非同步程式設計。

上面還有個state 沒有用上:

(item, state, localvalue)
這個state 可以 state.stop(); 停止

state.break() 跳出迴圈。

上面這樣計算是有問題的:

class program

var reuslt=rotatematrices(intlist);

console.writeline("檢視result:"+reuslt);

console.readkey();

} private static int rotatematrices(listintlist)

, localfinally: localvalue =>});

return result;

}}

第一次的結果:

第二次的結果:

兩次結果不一致。

驚喜不驚喜開心不開心?

剛開始我也很迷茫,後來看了一下群裡的大佬點播了一下。

請跑一下下面的,一切都會很清晰的。

private static int rotatematrices(listintlist)

, localfinally: localvalue =>

interlocked.add(ref tasknumber, 1);

} );

console.writeline("fornumber:"+fornumber);

console.writeline("tasknumber:" + tasknumber);

return result;

}

重點部分我畫了紅字:

簡化版:

intlist.asparallel().sum();

intlist.asparallel().aggregate(seed: 0, func: (sum, item) => sum + item);

我整理了一些:

1.並行呼叫

2.動態並行

3.並行linq

程式設計珠璣第五章

直接來習題吧 1 第一題可以看一下林銳的高質量c c 程式設計 2 3 4 5 第五題很明顯不應該每次都用 for i 0 i n 1 i assert a i a i 1 如何利用二分的性質來進行處理還是乙個問題。一種辦法是 int bs int a,int b,int e,int v retur...

C程式設計第五章

include 10.前20項和 int main printf 12.10f sum return 0 11.小球10次 int main printf 十次高度 10.6f t經過距離 10.6f n h,s return 0 12.猴子吃桃 誰家的猴子家裡能放下一千多個桃 int main p...

python第五章 Python學習(第五章)

記錄所有的名片字典 card list defshow menu 顯示資訊 print 50 print 歡迎使用 名片管理系統 v1.0 print print 1.新增名片 print 2.顯示全部 print 3.搜尋名片 print print 0.退出系統 print 50 defnew ...