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