cpu線程多有什么好處
中央處理器
中央處理器主要包括運(yùn)算器(算術(shù)邏輯運(yùn)算單元,ALU,Arithmetic Logic Unit)和高速緩沖存儲(chǔ)器(Cache)及實(shí)現(xiàn)它們之間聯(lián)系的數(shù)據(jù)(Data)、控制及狀態(tài)的總線(Bus)。它與內(nèi)部存儲(chǔ)器(Memory)和輸入/輸出(I/O)設(shè)備合稱為電子計(jì)算機(jī)三大核心部件。
一直以來(lái)有這樣的疑惑,在現(xiàn)如今多核多線程的電腦處理器之下,一個(gè)進(jìn)程中的幾個(gè)線程是 怎么運(yùn)行的呢?(是經(jīng)系統(tǒng)和JVM分配少量的資源 最后輪流切換 時(shí)間調(diào)度?還是這幾個(gè)線程分配到不同的核上同時(shí)運(yùn)行?)
今天就這一問(wèn)題查了一些資料,現(xiàn)整理如下:
單個(gè)CPU一個(gè)時(shí)刻只能運(yùn)行一個(gè)線程?
單核CPU電腦同一時(shí)間內(nèi)只能執(zhí)行一個(gè)線程,首先了解一下,CPU執(zhí)行的過(guò)程 ,它是把時(shí)間分成若干個(gè)小時(shí)間段,這些時(shí)間段很小的,系統(tǒng)中有很多進(jìn)程,每個(gè)進(jìn)程中又包含很多線程,在同一 時(shí)間段 內(nèi),電腦CPU只能處理一個(gè)線程(線程A),而下一個(gè) 時(shí)間段 就不一定是上一個(gè)時(shí)間段內(nèi)執(zhí)行的那個(gè)線程(線程A)了,可能是別的線程(線程B 吧)
CPU采用的是類似于時(shí)間片輪轉(zhuǎn)的機(jī)制,也就是說(shuō)同一時(shí)間一條進(jìn)程提出執(zhí)行請(qǐng)求時(shí),其他進(jìn)程只能等待它執(zhí)行完畢,CPU才會(huì)處理其他請(qǐng)求。其他進(jìn)程相當(dāng)于在排隊(duì)等待中。當(dāng)然了,為了避免某條進(jìn)程無(wú)限制時(shí)間的執(zhí)行,一般會(huì)限定一個(gè)時(shí)間,超時(shí) 的話,CPU根據(jù)一定的線程調(diào)度算法來(lái)切換線程。可以看做很多線程在并發(fā)執(zhí)行。其實(shí)還是在某一個(gè)時(shí)間點(diǎn)上只有一個(gè)線程在運(yùn)行罷了。
多核的話,每個(gè)核心都是同樣的原理。但是兩個(gè)核心就可以通過(guò)系統(tǒng)分配資源,同時(shí)執(zhí)行不同的進(jìn)程,這個(gè)就更復(fù)雜了。
每條進(jìn)程都有CPU分配的進(jìn)程號(hào)的。避免混亂。
一個(gè)核心就是實(shí)實(shí)在在的一個(gè)cpu處理設(shè)備 線程的概念可以理解成電腦處理信息的通道 既一個(gè)線程一個(gè)通道 一般來(lái)說(shuō)一個(gè)cpu核心處理一個(gè)通道的信息 但也不是絕對(duì) 因特爾支持超線程技術(shù)的cpu每個(gè)核心可以處理兩個(gè)或多個(gè)通道的信息 這就可以形容為超線程(既多出來(lái)的通道的處理能力)但前提是軟件也必須的支持超線程才行 否則單核雙線程或多線程也只能有單個(gè)通道工作 從某種意義上來(lái)說(shuō)cpu的能力被浪費(fèi)了 所以網(wǎng)友一般就會(huì)說(shuō) 真正的核心數(shù)(通道) 比虛擬出來(lái)的核心(通道)來(lái)個(gè)更實(shí)在。最后 線程數(shù)決定這CPU能同時(shí)處理幾件事情,在沒(méi)有超線程技術(shù)的情況下核心數(shù)等於線程數(shù)。
java線程調(diào)度
CPU對(duì)于各個(gè)線程的調(diào)度是隨機(jī)的(分時(shí)調(diào)度),在Java程序中,JVM負(fù)責(zé)線程的調(diào)度。 線程調(diào)度是指按照特定的機(jī)制為多個(gè)線程分配CPU的使用權(quán),也就是實(shí)際執(zhí)行的時(shí)候是線程,因此CPU調(diào)度的最小單位是線程,而資源分配的最小單位是進(jìn)程。
JVM調(diào)度的模式有兩種:分時(shí)調(diào)度和搶占式調(diào)度。
分時(shí)調(diào)度 是所有線程輪流獲得CPU使用權(quán),并平均分配每個(gè)線程占用CPU的時(shí)間;
搶占式調(diào)度 是根據(jù)線程的優(yōu)先級(jí)別來(lái)獲取CPU的使用權(quán)。JVM的線程調(diào)度模式采用了搶占式模式。既然是搶占調(diào)度,那么我們就能通過(guò)設(shè)置優(yōu)先級(jí)來(lái)“有限”的控制線程的運(yùn)行順序,注意“有限”一次。
CPU核數(shù) 跟多線程 的關(guā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)系的。
cpu線程多有什么好處
理論上說(shuō),一個(gè)核心只能對(duì)應(yīng)一條線程。而Intel的超線程技術(shù),是利用CPU閑置的資源整合出的虛擬線程,就計(jì)算性能來(lái)說(shuō),是不及物理核心的實(shí)際線程好的。但是,卻可以在一定程度上提升處理器并行處理的能力。和亂序執(zhí)行一樣,超線程也是一種提高處理器使用效率的方案。
就你舉得例子來(lái)說(shuō)。當(dāng)一個(gè)核心處理A任務(wù)時(shí),并不是整個(gè)核心都在參與工作,還有很大的閑置資源,而這些資源可以用來(lái)對(duì)B、C、D中某一個(gè)或幾個(gè)進(jìn)行預(yù)處理等等工作。但是,超線程技術(shù)的一大問(wèn)題就是和主線程的爭(zhēng)奪。比如虛擬線程和物理實(shí)際線程都需要調(diào)用某一緩存單元時(shí),虛擬線程就會(huì)暫停工作;
但是,如果該單元先于物理線程被虛擬線程調(diào)用,那么,虛擬線程就會(huì)影響物理主線程的工作,反而降低了執(zhí)行效率。當(dāng)下新一代的超線程技術(shù)在這個(gè)問(wèn)題上做了比較好的完善,所以效果還是不錯(cuò)的,盡管無(wú)法和物理線程相比。當(dāng)下的一個(gè)雙核四線程的處理器,比如I3,在并行計(jì)算上,能超過(guò)物理三核心,和入門(mén)級(jí)四核心看齊,已經(jīng)很不錯(cuò)了。
非常好我支持^.^
(316) 98.4%
不好我反對(duì)
(5) 1.6%
相關(guān)閱讀:
- [電子說(shuō)] 射頻識(shí)別技術(shù)漫談(27)——CPU卡概述 2023-10-24
- [電子說(shuō)] 講一講Apple Macintosh處理器過(guò)渡的故事 2023-10-24
- [電子說(shuō)] 國(guó)產(chǎn)金融工控機(jī)的廣泛應(yīng)用領(lǐng)域和獨(dú)特優(yōu)勢(shì) 2023-10-24
- [人工智能] 研華推出EPC-B3000系列嵌入式工控機(jī),搭載先進(jìn)X86架構(gòu)CPU,助力邊緣人工智能應(yīng)用 2023-10-24
- [電子說(shuō)] 異構(gòu)時(shí)代:CPU與GPU的發(fā)展演變 2023-10-24
- [電子說(shuō)] 11KW變頻器同時(shí)多個(gè)故障維修實(shí)例 2023-10-24
- [編程語(yǔ)言及工具] 一文詳解ZGC關(guān)鍵技術(shù) 2023-10-23
- [電子說(shuō)] AMD推出銳龍 Threadripper 7000系列處理器 2023-10-23
( 發(fā)表人:龔婷 )