成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

對多線程程序,單核cpu與多核cpu如何工作相關(guān)的探討

wslongchen / 1657人閱讀

摘要:對多線程程序,單核與多核如何工作相關(guān)的探討我們程序員在編碼的時候,涉及到技術(shù)方案時,往往會忽略掉代碼對性能方面的影響,或者沒有足夠的敏感度來幫助自己判斷自己的技術(shù)方案對系統(tǒng)性能造成的影響。

對多線程程序,單核cpu與多核cpu如何工作相關(guān)的探討

我們程序員在編碼的時候,涉及到技術(shù)方案時,往往會忽略掉代碼對性能方面的影響,或者沒有足夠的敏感度來幫助自己判斷自己的技術(shù)方案對系統(tǒng)性能造成的影響。改進的方式之一是,我們需要對底層系統(tǒng)的原理更了解一點,這樣心里才能有桿秤,知道選擇什么樣的技術(shù)去實現(xiàn)代碼,可能帶來什么樣的問題。
這篇文章,通過收集一些論壇討論問題,來幫助大家了解cpu對多線程的程序如何處理,性能會有什么影響和取舍,雖然內(nèi)容有些基礎(chǔ),但往往我們最容易忽略的就是這些基礎(chǔ)。

1. 多線程在單核和多核CPU上的執(zhí)行效率問題的討論

a1: 多線程在單cpu中其實也是順序執(zhí)行的,不過系統(tǒng)可以幫你切換那個執(zhí)行而已,其實并沒有快(反而慢)

多個cpu的話就可以在兩個cpu中同時執(zhí)行了..............

a2: 單核CPU上運行的多線程程序, 同一時間只能一個線程在跑, 系統(tǒng)幫你切換線程而已, 系統(tǒng)給每個線程分配時間片來執(zhí)行, 每個時間片大概10ms左右, 看起來像是同時跑, 但實際上是每個線程跑一點點就換到其它線程繼續(xù)跑

效率不會有提高的
切換線程反倒會增加開銷

a3: #3樓說的是對的。所以一般沒有必要的話,尤其在單核CPU的時候,不推薦使用多線程。

單核CPU時使用多線程,通常是有線程要處于等待狀態(tài)。
而對于普通的進度條更新類的,能夠簡單控制的(比如:在循環(huán)里面手動處理消息)就簡單控制,一般不使用線程,這樣可以提高程序的性能。并且避免掉不必要的線程同步問題。

a4: 你試一下雙核三線程,保準效率反而比雙線程低!

算法同樣時,CPU占用率達到100%的最小線程數(shù)效率最高,如果是cpu占率率高的運算單核單線程,雙核雙線程,四核四線程是最適合的。
但為什么有時候線程數(shù)超過CPU內(nèi)核數(shù)會更快呢?原因是這種程序的單個線程運算量不足以占滿CPU一個內(nèi)核(比如存在大量IO操作,IO比較慢,是程序瓶頸)。

a5: 多線程的用處在于,做某個耗時的操作時,需要等待返回結(jié)果,這時用多線程可以提高程序并發(fā)程度。如果一個不需要任何等待并且順序執(zhí)行能夠完成的任務(wù),用多線程簡直是浪費。

討論來源地址

2. 淺談多核CPU、多線程與并行計算

a1: CPU發(fā)展趨勢

核心數(shù)目依舊會越來越多,依據(jù)摩爾定律,由于單個核心性能提升有著嚴重的瓶頸問題,普通的桌面PC有望在2017年末2018年初達到24核心(或者16 核32線程),我們?nèi)绾蝸砻鎸@突如其來的核心數(shù)目的增加?編程也要與時俱進。筆者斗膽預(yù)測,CPU各個核心之間的片內(nèi)總線將會采用4路組相連),因為全相連太過復(fù)雜,單總線又不夠給力。而且應(yīng)該是非對稱多核處理器,可能其中會混雜幾個DSP處理器或流處理器。

a2: 線程越多越好嗎?什么時候才有必要用多線程?

線程必然不是越多越好,線程切換也是要開銷的,當你增加一個線程的時候,增加的額外開銷要小于該線程能夠消除的阻塞時間,這才叫物有所值。

Linux自從2.6內(nèi)核開始,就會把不同的線程交給不同的核心去處理。Windows也從NT.4.0開始支持這一特性。

什么時候該使用多線程呢?這要分四種情況討論:

a.多核CPU——計算密集型任務(wù)。此時要盡量使用多線程,可以提高任務(wù)執(zhí)行效率,例如加密解密,數(shù)據(jù)壓縮解壓縮(視頻、音頻、普通數(shù)據(jù)),否則只能使一個核心滿載,而其他核心閑置。

b.單核CPU——計算密集型任務(wù)。此時的任務(wù)已經(jīng)把CPU資源100%消耗了,就沒必要也不可能使用多線程來提高計算效率了;相反,如果要做人機交互,最好還是要用多線程,避免用戶沒法對計算機進行操作。

c.單核CPU——IO密集型任務(wù),使用多線程還是為了人機交互方便,

d.多核CPU——IO密集型任務(wù),這就更不用說了,跟單核時候原因一樣。

程序員需要掌握的技巧/技術(shù)

(1)減少串行化的代碼用以提高效率。這是廢話。

(2)單一的共享數(shù)據(jù)分布化:把一個數(shù)據(jù)復(fù)制很多份,讓不同線程可以同時訪問。

(3)負載均衡,分為靜態(tài)的和動態(tài)的兩種。具體的參見有關(guān)文獻。

討論來源地址

3. 請問:CPU的多核和應(yīng)用程序的多線程的關(guān)系是怎么樣的?

a1: 多核兒就是系統(tǒng)同時可以運行多個線程,比如雙核可以同時執(zhí)行兩個線程。單核兒只能一次執(zhí)行一個線程。

a2: 試了一個ping 從192.168.0.1 到192.169.0.255的程序

用多線程做的,發(fā)現(xiàn)在單核的機器上和多核的機器運行性能有兩倍左右的差異。

a3: 多核對于用戶,應(yīng)該說對于程序員來說,是透明的,根本不用管它,當你是單核的編程就可以了,除非使用OpenMP進行編程,就用很多條條框框了,另外你上面的測試是不準確的,網(wǎng)絡(luò)(主要是遠程主機)會因為不同時候而有不同的響應(yīng)速度,你應(yīng)該在干凈的本機同環(huán)境下進行測試.但是,對于多線程多核優(yōu)于單核還是可以確定的. 總之,我們不用擔(dān)心程序在單核或多核上會出現(xiàn)并發(fā)問題.

a4: 多核指的是CPU有多個核心,多線程是程序有多個線程在同時執(zhí)行。
多核也要用多線程才能發(fā)揮優(yōu)勢。
同樣,多線程要在多核上才能真正有優(yōu)勢。
這點來說,對程序員不是透明的。程序員可以控制程序/線程在哪個CPU(核)上運行。用戶也可以控制程序在哪幾個核上運行。所以多核,多線程對用戶和程序員都不是透明的。程序員必須了解這方面的知識。才能讓程序最大限度的發(fā)揮機器的性能。

討論來源地址

原文引用

編輯by:
二月的獅子

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76723.html

相關(guān)文章

  • 對多線程程序單核cpu多核cpu如何工作相關(guān)探討

    摘要:對多線程程序,單核與多核如何工作相關(guān)的探討我們程序員在編碼的時候,涉及到技術(shù)方案時,往往會忽略掉代碼對性能方面的影響,或者沒有足夠的敏感度來幫助自己判斷自己的技術(shù)方案對系統(tǒng)性能造成的影響。 對多線程程序,單核cpu與多核cpu如何工作相關(guān)的探討 我們程序員在編碼的時候,涉及到技術(shù)方案時,往往會忽略掉代碼對性能方面的影響,或者沒有足夠的敏感度來幫助自己判斷自己的技術(shù)方案對系統(tǒng)性能造成的影...

    Chiclaim 評論0 收藏0
  • 操作系統(tǒng):多進程、多線程

    摘要:實際工作并不是非此即彼,往往都是進程線程結(jié)合的方式。操作系統(tǒng)會保證當線程數(shù)不大于數(shù)目時,不同的線程運行于不同的上改善程序結(jié)構(gòu)。關(guān)于操作系統(tǒng)內(nèi)部如何創(chuàng)建銷毀進程線程,即為什么這些操作進程消耗會比線程大,還沒有搞明白。 一、淺層理解 進程是資源分配的最小單位,線程是CPU分配的最小單位——簡單明了的說明了進程與線程的區(qū)別特點,然而在實際工作中并沒有什么卵用。 二、多個維度下,進程與線程的優(yōu)...

    Java3y 評論0 收藏0
  • 為什么響應(yīng)式編程并非一時之勢?

    摘要:編者按本文作者為,文章從程序架構(gòu)與系統(tǒng)的發(fā)展歷程出發(fā),逐步論證了為什么響應(yīng)式編程并非一時之勢,而是能帶來更快處理速度,更高硬件利用率的未來選擇。這就是摩爾定律所說的應(yīng)用程序。響應(yīng)式方法并非一時之勢它是編寫軟件的未來趨勢。 【編者按】本文作者為 David Buschman,文章從程序架構(gòu)與系統(tǒng)的發(fā)展歷程出發(fā),逐步論證了為什么響應(yīng)式編程并非一時之勢,而是能帶來更快處理速度,更高硬件利用率...

    JessYanCoding 評論0 收藏0
  • 來,了解一下Java內(nèi)存模型(JMM)

    摘要:因為管理人員是了解手下的人員以及自己負責(zé)的事情的。處理器優(yōu)化和指令重排上面提到在在和主存之間增加緩存,在多線程場景下會存在緩存一致性問題。有沒有發(fā)現(xiàn),緩存一致性問題其實就是可見性問題。 網(wǎng)上有很多關(guān)于Java內(nèi)存模型的文章,在《深入理解Java虛擬機》和《Java并發(fā)編程的藝術(shù)》等書中也都有關(guān)于這個知識點的介紹。但是,很多人讀完之后還是搞不清楚,甚至有的人說自己更懵了。本文,就來整體的...

    kviccn 評論0 收藏0
  • 來,了解一下Java內(nèi)存模型(JMM)

    摘要:因為管理人員是了解手下的人員以及自己負責(zé)的事情的。處理器優(yōu)化和指令重排上面提到在在和主存之間增加緩存,在多線程場景下會存在緩存一致性問題。有沒有發(fā)現(xiàn),緩存一致性問題其實就是可見性問題。 網(wǎng)上有很多關(guān)于Java內(nèi)存模型的文章,在《深入理解Java虛擬機》和《Java并發(fā)編程的藝術(shù)》等書中也都有關(guān)于這個知識點的介紹。但是,很多人讀完之后還是搞不清楚,甚至有的人說自己更懵了。本文,就來整體的...

    eccozhou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<