CPU核数跟多线程的关系
CPU核數(shù)跟多線程的關(guān)系
CSDN博客 原文? http://blog.csdn.net/qingchen191/article/details/20478651一直以來(lái)有這樣的疑惑,單核CPU適合多線程嗎?是不是幾個(gè)核的CPU開(kāi)幾個(gè)線程是最合適的?
今天就這一問(wèn)題查了一些資料,現(xiàn)整理如下:
? ? 要說(shuō)多線程就離不開(kāi)進(jìn)程,進(jìn)程和線程的區(qū)別在這里就不詳細(xì)說(shuō)了,只將關(guān)鍵的幾點(diǎn):
a)進(jìn)程之間是相互獨(dú)立的,不共享內(nèi)存和數(shù)據(jù),線程之間的內(nèi)存和數(shù)據(jù)是公用的,每個(gè)線程只有自己的一組CPU指令、寄存器和堆棧,對(duì)于線程來(lái)說(shuō)只有CPU里的東西是自己獨(dú)享的,程序中的其他東西都是跟同一個(gè)進(jìn)程里的其他線程共享的。
b)操作系統(tǒng)創(chuàng)建進(jìn)程時(shí)要分配好多外部資源,所以開(kāi)銷(xiāo)大。(這個(gè)跟操作系統(tǒng)有關(guān),有人做過(guò)實(shí)驗(yàn),window創(chuàng)建進(jìn)程的開(kāi)銷(xiāo)大,linux創(chuàng)建進(jìn)程的開(kāi)銷(xiāo)就很小。)
? ? 再來(lái)說(shuō)一下CPU,在過(guò)去單CPU時(shí)代,單任務(wù)在一個(gè)時(shí)間點(diǎn)只能執(zhí)行單一程序。之后發(fā)展到多任務(wù)階段,計(jì)算機(jī)能在同一時(shí)間點(diǎn)并行執(zhí)行多任務(wù)或多進(jìn)程。雖然并不是真正意義上的“同一時(shí)間點(diǎn)”,而是多個(gè)任務(wù)或進(jìn)程共享一個(gè)CPU,并交由操作系統(tǒng)來(lái)完成多任務(wù)間對(duì)CPU的運(yùn)行切換,以使得每個(gè)任務(wù)都有機(jī)會(huì)獲得一定的時(shí)間片運(yùn)行。而現(xiàn)在多核CPU的情況下,同一時(shí)間點(diǎn)可以執(zhí)行多個(gè)任務(wù),具體到這個(gè)任務(wù)在CPU哪個(gè)核上運(yùn)行,這個(gè)就跟操作系統(tǒng)和CPU本身的設(shè)計(jì)相關(guān)了。
? ? 我們假設(shè)一個(gè)極端的情況:在一臺(tái)單核計(jì)算機(jī)上只運(yùn)行2個(gè)程序,一個(gè)是我們的程序A,另一個(gè)是操作系統(tǒng)的程序B,每個(gè)程序是一個(gè)進(jìn)程。單核CPU的時(shí)候,A和B在CPU上交替運(yùn)行,具體的分配方式由操作系統(tǒng)來(lái)判斷,我這里猜測(cè)應(yīng)該跟A和B的線程數(shù)有關(guān),因?yàn)榫€程是CPU級(jí)別的,如果A有5個(gè)線程,B也有5個(gè)線程,那么CPU分配給A和B的時(shí)間應(yīng)該是1:1的;如果A增加到15個(gè)線程,CPU分配給A和B的時(shí)間應(yīng)該是3:1的比例。所以此時(shí)如果A的線程數(shù)多,那么獲得的CPU執(zhí)行次數(shù)就多,處理的速度也就快了。以上假設(shè)的前提是:①A和B的優(yōu)先級(jí)相同,②A和B都是只消耗CPU資源的程序。
如果相同的情況用一個(gè)雙核的計(jì)算機(jī)來(lái)處理又會(huì)是什么結(jié)果呢?假設(shè)這個(gè)雙核的計(jì)算機(jī)和操作系統(tǒng)比較傻,把A進(jìn)程分配到核1上,B進(jìn)程分配到核2上,那不管A有幾個(gè)線程,都是用核1來(lái)處理,那么時(shí)間肯定是一樣的。不過(guò)現(xiàn)實(shí)中應(yīng)該不會(huì)有這么傻的CPU和操作系統(tǒng)吧。 所以趕緊還是會(huì)根據(jù)線程來(lái)進(jìn)行處理,當(dāng)A的線程比B多時(shí),會(huì)占用核2來(lái)處理A的線程。
? ? 剛才說(shuō)的是只消耗CPU資源的程序,但這樣的程序在實(shí)際應(yīng)用中基本上是沒(méi)有的,總會(huì)有跟資源打交道的。比如讀個(gè)文件,查個(gè)數(shù)據(jù)庫(kù),訪問(wèn)一個(gè)網(wǎng)絡(luò)連接等等。這個(gè)時(shí)候多線程才真正體現(xiàn)出優(yōu)勢(shì),在一個(gè)進(jìn)程中,線程a去讀文件,線程b去查數(shù)據(jù)庫(kù),線程c去訪問(wèn)網(wǎng)絡(luò),a先用一下CPU,然后去讀文件,此時(shí)CPU空閑,b就用一下,然后去查數(shù)據(jù)庫(kù),……,相對(duì)于讀文件、查數(shù)據(jù)庫(kù)、訪問(wèn)網(wǎng)絡(luò)來(lái)說(shuō)CPU計(jì)算的時(shí)間幾乎可以忽略不計(jì),所以多線程實(shí)際上是計(jì)算機(jī)多種資源的并行運(yùn)用,跟CPU有幾個(gè)核心是沒(méi)什么關(guān)系的。
總結(jié)
以上是生活随笔為你收集整理的CPU核数跟多线程的关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 优化算法笔记|粒子群算法理解及Pytho
- 下一篇: 吴恩达机器学习笔记十三之推荐系统