1. 程式人生 > >多核程式設計 與 單核多執行緒程式設計的區別

多核程式設計 與 單核多執行緒程式設計的區別

1、鎖競爭: 單核中,如果單個執行緒取得所,則獲取CPU執行時間,其他等待獲取鎖的執行緒被阻塞。使用了鎖,影響的只是枷鎖和解鎖的耗時,CPU始終執行。 多核中,若2個(更多)執行緒使用同一把鎖,則會導致CPU飢餓。實際還是序列化執行! 2、執行緒分解和執行的區別: 對單核CPU,對客戶端軟體,採用多執行緒,主要是 建立多執行緒將一些計算放在後臺執行,而不影響使用者互動操作。(使用者介面 & 其他計算 並行進行)提高使用者的操作效能! 多核中,分別出多個執行緒,不再限於將使用者介面操作和其他計算分離。分解多個執行緒使為了讓計算分配到各CPU上執行。執行執行緒數量與CPU核數有關!如果執行緒數小於核數,某些CPU肯定處於空閒狀態。 3、CPU核負載平衡: 單核中不考慮 負載平衡,各個執行緒計算量相差很大,也不會影響程式總計算時間。 多核中,必須考慮將各個執行緒計算量均衡到各CPU 4、任務排程策略區別: 單核中,任務排程主要考慮分時,某些任務的優先執行!常用:時間片輪轉,優先順序搶佔! 多核中,任務排程比單核有新的需求。要考慮 不同任務的耗時,和計算均衡!不能採用簡單的時間片輪轉和優先順序搶佔。而總的呼叫作業系統不能掌握。需要程式設計師實現! 5、CPU cache存取: CPU讀取Cache時,以行為單位讀取。如果2個硬體執行緒的兩塊不同記憶體位於同一Cache行。當2個硬體執行緒同時對各自的記憶體進行寫操作,導致2個執行緒同時寫一個cache行。衝突!!【偽記憶體問題】 單核機,不存在 偽記憶體問題 多核機,存在偽記憶體問題!想辦法,使不同的記憶體塊對映到不同Cache行 6、任務優先順序搶先的區別: 單核CPU中,優先順序搶佔很常見的任務排程策略。 多核CPU中,多個核可導致,低優先順序和高優先順序的任務同時執行。需要進一步改進 優先順序排程策略。 7、序列計算與平行計算、分散式計算的區別 單核多執行緒程式設計中,都是序列演算法。用不到平行計算,更用不到分散式計算 多核程式設計中,多采用 平行計算 和 分散式計算 平行計算=並行設計模式+並行演算法 分散式計算複雜度 > 平行計算的複雜度 > 序列計算複雜度 平行計算:只考慮計算並行地執行,不考慮執行緒間的競爭導致CPU飢餓 分散式計算:相比並行計算,能更好解決CPU飢餓,使計算均衡地分配任務到各核心