1.多執行緒在單核和多核cpu上的執行效率問題的討論
a1:多執行緒在單cpu中其實也是順序執行的,不過系統可以幫你切換那個執行而已,其實並沒有快(反而慢)
多個cpu的話就可以在兩個cpu中同時執行了..............
a2:單核cpu上執行的多執行緒程式, 同一時間只能乙個執行緒在跑, 系統幫你切換執行緒而已, 系統給每個執行緒分配時間片來執行, 每個時間片大概10ms左右, 看起來像是同時跑, 但實際上是每個執行緒跑一點點就換到其它執行緒繼續跑
效率不會有提高的
切換執行緒反倒會增加開銷
a3: #3樓說的是對的。所以一般沒有必要的話,尤其在單核cpu的時候,不推薦使用多執行緒。
單核cpu時使用多執行緒,通常是有執行緒要處於等待狀態。
而對於普通的進度條更新類的,能夠簡單控制的(比如:在迴圈裡面手動處理訊息)就簡單控制,一般不使用執行緒,這樣可以提高程式的效能。並且避免掉不必要的執行緒同步問題。
a4: 你試一下雙核三線程,保準效率反而比雙線程低!
演算法同樣時,cpu佔用率達到100%的最小執行緒數效率最高,如果是cpu占率率高的運算單核單執行緒,雙核雙線程,四核四執行緒是最適合的。
但為什麼有時候執行緒數超過cpu核心數會更快呢?原因是這種程式的單個執行緒運算量不足以佔滿cpu乙個核心(比如存在大量io操作,io比較慢,是程式瓶頸)。
a5:多執行緒的用處在於,做某個耗時的操作時,需要等待返回結果,這時用多執行緒可以提高程式併發程度。如果乙個不需要任何等待並且順序執行能夠完成的任務,用多執行緒簡直是浪費。
2.**多核cpu、多執行緒與平行計算
a1: cpu發展趨勢
核心數目依舊會越來越多,依據摩爾定律,由於單個核心效能提公升有著嚴重的瓶頸問題,普通的桌面pc有望在2023年末2023年初達到24核心(或者16核32執行緒),我們如何來面對這突如其來的核心數目的增加?程式設計也要與時俱進。筆者斗膽**,cpu各個核心之間的片內匯流排將會採用4路組相連:),因為全相連太過複雜,單匯流排又不夠給力。而且應該是非對稱多核處理器,可能其中會混雜幾個dsp處理器或流處理器。
a2: 執行緒越多越好嗎?什麼時候才有必要用多執行緒?
執行緒必然不是越多越好,執行緒切換也是要開銷的,當你增加乙個執行緒的時候,增加的額外開銷要小於該執行緒能夠消除的阻塞時間,這才叫物有所值。
linux自從2.6核心開始,就會把不同的執行緒交給不同的核心去處理。windows也從nt.4.0開始支援這一特性。
什麼時候該使用多執行緒呢?這要分四種情況討論:
b.單核cpu——計算密集型任務。此時的任務已經把cpu資源100%消耗了,就沒必要也不可能使用多執行緒來提高計算效率了;相反,如果要做人機互動,最好還是要用多執行緒,避免使用者沒法對計算機進行操作。
c.單核cpu——io密集型任務,使用多執行緒還是為了人機互動方便,
d.多核cpu——io密集型任務,這就更不用說了,跟單核時候原因一樣。
4.程式設計師需要掌握的技巧/技術
(1)減少序列化的**用以提高效率。這是廢話。
(2)單一的共享資料分布化:把乙個資料複製很多份,讓不同執行緒可以同時訪問。
(3)負載均衡,分為靜態的和動態的兩種。具體的參見有關文獻。
3.請問:cpu的多核和應用程式的多執行緒的關係是怎麼樣的?
a1: 多核兒就是系統同時可以執行多個執行緒,比如雙核可以同時執行兩個執行緒。單核兒只能一次執行乙個執行緒。
a2: 試了乙個ping 從192.168.0.1 到192.169.0.255的程式
用多執行緒做的,發現在單核的機器上和多核的機器執行效能有兩倍左右的差異。
a3: 多核對於使用者,應該說對於程式設計師來說,是透明的,根本不用管它,當你是單核的程式設計就可以了,除非使用openmp進行程式設計,就用很多條條框框了,另外你上面的測試是不準確的,網路(主要是遠端主機)會因為不同時候而有不同的響應速度,你應該在乾淨的本機同環境下進行測試.但是,對於多執行緒多核優於單核還是可以確定的. 總之,我們不用擔心程式在單核或多核上會出現併發問題.
a4:多核指的是cpu有多個核心,多執行緒是程式有多個執行緒在同時執行。
多核也要用多執行緒才能發揮優勢。
同樣,多執行緒要在多核上才能真正有優勢。
這點來說,對程式設計師不是透明的。程式設計師可以控制程式/執行緒在哪個cpu(核)上執行。使用者也可以控制程式在哪幾個核上執行。所以多核,多執行緒對使用者和程式設計師都不是透明的。程式設計師必須了解這方面的知識。才能讓程式最大限度的發揮機器的效能。
單核 多核 多執行緒
1 鎖競爭 單核中,如果單個執行緒取得所,則獲取cpu執行時間,其他等待獲取鎖的執行緒被阻塞。使用了鎖,影響的只是枷鎖和解鎖的耗時,cpu始終執行。多核中,若2個 更多 執行緒使用同一把鎖,則會導致cpu飢餓。實際還是序列化執行!2 執行緒分解和執行的區別 對單核cpu,對客戶端軟體,採用多執行緒,...
多執行緒在單核cpu與多核cpu下如何工作
1.多執行緒在單核和多核cpu上的執行效率問題的討論 a1 多執行緒在單cpu中其實也是順序執行的,不過系統可以幫你切換那個執行而已,其實並沒有快 反而慢 多個cpu的話就可以在兩個cpu中同時執行了.a2 單核cpu上執行的多執行緒程式,同一時間只能乙個執行緒在跑,系統幫你切換執行緒而已,系統給每...
單核cpu與多執行緒體會
1.多執行緒在單核和多核cpu上的執行效率問題的討論 多執行緒在單cpu中其實也是順序執行的,不過系統可以幫你切換那個執行而已,其實並沒有快 反而慢,涉及到切換執行緒的消耗 多個cpu的話就可以在兩個cpu中同時執行兩個執行緒.但為什麼有時候執行緒數超過cpu核心數會更快呢?原因是這種程式的單個執行...