死磕java線程系列之線程模型-創(chuàng)新互聯(lián)

問(wèn)題

(1)線程有哪些類(lèi)型?

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁(yè)設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開(kāi)發(fā)技術(shù)和網(wǎng)頁(yè)設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)建站專(zhuān)業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站開(kāi)發(fā)、電商門(mén)戶(hù)網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶(hù)體驗(yàn)的提升,我們力求做到極致!

(2)線程模型有哪些?

(3)各語(yǔ)言是怎么實(shí)現(xiàn)自己的線程模型的?

簡(jiǎn)介

在Java中,我們平時(shí)所說(shuō)的并發(fā)編程、多線程、共享資源等概念都是與線程相關(guān)的,這里所說(shuō)的線程實(shí)際上應(yīng)該叫作“用戶(hù)線程”,而對(duì)應(yīng)到操作系統(tǒng),還有另外一種線程叫作“內(nèi)核線程”。

用戶(hù)線程位于內(nèi)核之上,它的管理無(wú)需內(nèi)核支持;而內(nèi)核線程由操作系統(tǒng)來(lái)直接支持與管理。幾乎所有的現(xiàn)代操作系統(tǒng),包括 Windows、Linux、Mac OS X 和 Solaris,都支持內(nèi)核線程。

最終,用戶(hù)線程和內(nèi)核線程之間必然存在某種關(guān)系,本章我們一起來(lái)學(xué)習(xí)下建立這種關(guān)系常見(jiàn)的三種方法:多對(duì)一模型、一對(duì)一模型和多對(duì)多模型。

多對(duì)一模型

死磕 java線程系列之線程模型

多對(duì)一線程模型,又叫作用戶(hù)級(jí)線程模型,即多個(gè)用戶(hù)線程對(duì)應(yīng)到同一個(gè)內(nèi)核線程上,線程的創(chuàng)建、調(diào)度、同步的所有細(xì)節(jié)全部由進(jìn)程的用戶(hù)空間線程庫(kù)來(lái)處理。

優(yōu)點(diǎn):

  • 用戶(hù)線程的很多操作對(duì)內(nèi)核來(lái)說(shuō)都是透明的,不需要用戶(hù)態(tài)和內(nèi)核態(tài)的頻繁切換,使線程的創(chuàng)建、調(diào)度、同步等非??欤?/li>

缺點(diǎn):

  • 由于多個(gè)用戶(hù)線程對(duì)應(yīng)到同一個(gè)內(nèi)核線程,如果其中一個(gè)用戶(hù)線程阻塞,那么該其他用戶(hù)線程也無(wú)法執(zhí)行;

  • 內(nèi)核并不知道用戶(hù)態(tài)有哪些線程,無(wú)法像內(nèi)核線程一樣實(shí)現(xiàn)較完整的調(diào)度、優(yōu)先級(jí)等;

許多語(yǔ)言實(shí)現(xiàn)的協(xié)程庫(kù)基本上都屬于這種方式,比如python的gevent。

一對(duì)一模型

死磕 java線程系列之線程模型

一對(duì)一模型,又叫作內(nèi)核級(jí)線程模型,即一個(gè)用戶(hù)線程對(duì)應(yīng)一個(gè)內(nèi)核線程,內(nèi)核負(fù)責(zé)每個(gè)線程的調(diào)度,可以調(diào)度到其他處理器上面。

優(yōu)點(diǎn):

  • 實(shí)現(xiàn)簡(jiǎn)單,本文由公從號(hào)“彤哥讀源碼”原創(chuàng);

缺點(diǎn):

  • 對(duì)用戶(hù)線程的大部分操作都會(huì)映射到內(nèi)核線程上,引起用戶(hù)態(tài)和內(nèi)核態(tài)的頻繁切換;

  • 內(nèi)核為每個(gè)線程都映射調(diào)度實(shí)體,如果系統(tǒng)出現(xiàn)大量線程,會(huì)對(duì)系統(tǒng)性能有影響;

Java使用的就是一對(duì)一線程模型,所以在Java中啟一個(gè)線程要謹(jǐn)慎。

多對(duì)多模型

死磕 java線程系列之線程模型

多對(duì)多模型,又叫作兩級(jí)線程模型,它是博采眾長(zhǎng)之后的產(chǎn)物,充分吸收前兩種線程模型的優(yōu)點(diǎn)且盡量規(guī)避它們的缺點(diǎn)。

在此模型下,用戶(hù)線程與內(nèi)核線程是多對(duì)多(m : n,通常m>=n)的映射模型。

首先,區(qū)別于多對(duì)一模型,多對(duì)多模型中的一個(gè)進(jìn)程可以與多個(gè)內(nèi)核線程關(guān)聯(lián),于是進(jìn)程內(nèi)的多個(gè)用戶(hù)線程可以綁定不同的內(nèi)核線程,這點(diǎn)和一對(duì)一模型相似;

其次,又區(qū)別于一對(duì)一模型,它的進(jìn)程里的所有用戶(hù)線程并不與內(nèi)核線程一一綁定,而是可以動(dòng)態(tài)綁定內(nèi)核線程, 當(dāng)某個(gè)內(nèi)核線程因?yàn)槠浣壎ǖ挠脩?hù)線程的阻塞操作被內(nèi)核調(diào)度讓出CPU時(shí),其關(guān)聯(lián)的進(jìn)程中其余用戶(hù)線程可以重新與其他內(nèi)核線程綁定運(yùn)行。

所以,多對(duì)多模型既不是多對(duì)一模型那種完全靠自己調(diào)度的也不是一對(duì)一模型完全靠操作系統(tǒng)調(diào)度的,而是中間態(tài)(自身調(diào)度與系統(tǒng)調(diào)度協(xié)同工作),因?yàn)檫@種模型的高度復(fù)雜性,操作系統(tǒng)內(nèi)核開(kāi)發(fā)者一般不會(huì)使用,所以更多時(shí)候是作為第三方庫(kù)的形式出現(xiàn)。

優(yōu)點(diǎn):

  • 兼具多對(duì)一模型的輕量;

  • 由于對(duì)應(yīng)了多個(gè)內(nèi)核線程,則一個(gè)用戶(hù)線程阻塞時(shí),其他用戶(hù)線程仍然可以執(zhí)行;

  • 由于對(duì)應(yīng)了多個(gè)內(nèi)核線程,則可以實(shí)現(xiàn)較完整的調(diào)度、優(yōu)先級(jí)等;

缺點(diǎn):

  • 實(shí)現(xiàn)復(fù)雜,本文由公從號(hào)“彤哥讀源碼”原創(chuàng);

Go語(yǔ)言中的goroutine調(diào)度器就是采用的這種實(shí)現(xiàn)方案,在Go語(yǔ)言中一個(gè)進(jìn)程可以啟動(dòng)成千上萬(wàn)個(gè)goroutine,這也是其出道以來(lái)就自帶“高并發(fā)”光環(huán)的重要原因。

后面講到Java中的ForkJoinPool的時(shí)候,我們會(huì)拿Go語(yǔ)言的PMG線程模型來(lái)對(duì)比講解。

總結(jié)

(1)線程分為用戶(hù)線程和內(nèi)核線程;

(2)線程模型有多對(duì)一模型、一對(duì)一模型、多對(duì)多模型;

(3)操作系統(tǒng)一般只實(shí)現(xiàn)到一對(duì)一模型;

(4)Java使用的是一對(duì)一線程模型,所以它的一個(gè)線程對(duì)應(yīng)于一個(gè)內(nèi)核線程,調(diào)度完全交給操作系統(tǒng)來(lái)處理;

(5)Go語(yǔ)言使用的是多對(duì)多線程模型,這也是其高并發(fā)的原因,它的線程模型與Java中的ForkJoinPool非常類(lèi)似;

(6)python的gevent使用的是多對(duì)一線程模型;

彩蛋

你所學(xué)過(guò)的語(yǔ)言都是使用的什么線程模型呢?

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

分享題目:死磕java線程系列之線程模型-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)源:http://muchs.cn/article12/djiggc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站策劃、App開(kāi)發(fā)、電子商務(wù)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)