一、鎖競爭:
單核中,若是單個線程取得所,則獲取CPU運行時間,其餘等待獲取鎖的線程被阻塞。使用了鎖,影響的只是枷鎖和解鎖的耗時,CPU始終運行。
多核中,若2個(更多)線程使用同一把鎖,則會致使CPU飢餓。實際仍是串行化執行!
二、線程分解和執行的區別:
對單核CPU,對客戶端軟件,採用多線程,主要是 建立多線程將一些計算放在後臺執行,而不影響用戶交互操做。(用戶界面 & 其餘計算 並行進行)提升用戶的操做性能!
多核中,分別出多個線程,再也不限於將用戶界面操做和其餘計算分離。分解多個線程使爲了讓計算分配到各CPU上執行。執行線程數量與CPU核數有關!若是線程數小於核數,某些CPU確定處於空閒狀態。
三、CPU核負載平衡:
單核中不考慮 負載平衡,各個線程計算量相差很大,也不會影響程序總計算時間。
多核中,必須考慮將各個線程計算量均衡到各CPU
四、任務調度策略區別:
單核中,任務調度主要考慮分時,某些任務的優先執行!經常使用:時間片輪轉,優先級搶佔!
多核中,任務調度比單核有新的需求。要考慮 不一樣任務的耗時,和計算均衡!不能採用簡單的時間片輪轉和優先級搶佔。而總的調用操做系統不能掌握。須要程序員實現!
五、CPU cache存取:
CPU讀取Cache時,以行爲單位讀取。若是2個硬件線程的兩塊不一樣內存位於同一Cache行。當2個硬件線程同時對各自的內存進行寫操做,致使2個線程同時寫一個cache行。衝突!!【
僞內存問題】
單核機,不存在 僞內存問題
多核機,存在僞內存問題!想辦法,使不一樣的內存塊映射到不一樣Cache行
六、任務優先級搶先的區別:
單核CPU中,優先級搶佔很常見的任務調度策略。
多核CPU中,多個核可致使,低優先級和高優先級的任務同時運行。須要進一步改進 優先級調度策略。
七、串行計算與並行計算、分佈式計算的區別
單核多線程編程中,都是串行算法。用不到並行計算,更用不到分佈式計算
多核編程中,多采用 並行計算 和 分佈式計算
並行計算=並行設計模式+並行算法
分佈式計算複雜度 > 並行計算的複雜度 > 串行計算複雜度
並行計算:只考慮計算並行地執行,不考慮線程間的競爭致使CPU飢餓
分佈式計算:相比並行計算,能更好解決CPU飢餓,使計算均衡地分配任務到各內核