(1)線程有哪些類型?
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡程序員、網(wǎng)頁設計師等,應用各種網(wǎng)絡程序開發(fā)技術和網(wǎng)頁設計技術配合操作的協(xié)同工作。創(chuàng)新互聯(lián)建站專業(yè)提供成都網(wǎng)站建設、成都網(wǎng)站制作,網(wǎng)頁設計,網(wǎng)站制作(企業(yè)站、響應式網(wǎng)站開發(fā)、電商門戶網(wǎng)站)等服務,從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗的提升,我們力求做到極致!(2)線程模型有哪些?
(3)各語言是怎么實現(xiàn)自己的線程模型的?
在Java中,我們平時所說的并發(fā)編程、多線程、共享資源等概念都是與線程相關的,這里所說的線程實際上應該叫作“用戶線程”,而對應到操作系統(tǒng),還有另外一種線程叫作“內(nèi)核線程”。
用戶線程位于內(nèi)核之上,它的管理無需內(nèi)核支持;而內(nèi)核線程由操作系統(tǒng)來直接支持與管理。幾乎所有的現(xiàn)代操作系統(tǒng),包括 Windows、Linux、Mac OS X 和 Solaris,都支持內(nèi)核線程。
最終,用戶線程和內(nèi)核線程之間必然存在某種關系,本章我們一起來學習下建立這種關系常見的三種方法:多對一模型、一對一模型和多對多模型。
多對一線程模型,又叫作用戶級線程模型,即多個用戶線程對應到同一個內(nèi)核線程上,線程的創(chuàng)建、調(diào)度、同步的所有細節(jié)全部由進程的用戶空間線程庫來處理。
優(yōu)點:
缺點:
由于多個用戶線程對應到同一個內(nèi)核線程,如果其中一個用戶線程阻塞,那么該其他用戶線程也無法執(zhí)行;
許多語言實現(xiàn)的協(xié)程庫基本上都屬于這種方式,比如python的gevent。
一對一模型,又叫作內(nèi)核級線程模型,即一個用戶線程對應一個內(nèi)核線程,內(nèi)核負責每個線程的調(diào)度,可以調(diào)度到其他處理器上面。
優(yōu)點:
缺點:
對用戶線程的大部分操作都會映射到內(nèi)核線程上,引起用戶態(tài)和內(nèi)核態(tài)的頻繁切換;
Java使用的就是一對一線程模型,所以在Java中啟一個線程要謹慎。
多對多模型,又叫作兩級線程模型,它是博采眾長之后的產(chǎn)物,充分吸收前兩種線程模型的優(yōu)點且盡量規(guī)避它們的缺點。
在此模型下,用戶線程與內(nèi)核線程是多對多(m : n,通常m>=n)的映射模型。
首先,區(qū)別于多對一模型,多對多模型中的一個進程可以與多個內(nèi)核線程關聯(lián),于是進程內(nèi)的多個用戶線程可以綁定不同的內(nèi)核線程,這點和一對一模型相似;
其次,又區(qū)別于一對一模型,它的進程里的所有用戶線程并不與內(nèi)核線程一一綁定,而是可以動態(tài)綁定內(nèi)核線程, 當某個內(nèi)核線程因為其綁定的用戶線程的阻塞操作被內(nèi)核調(diào)度讓出CPU時,其關聯(lián)的進程中其余用戶線程可以重新與其他內(nèi)核線程綁定運行。
所以,多對多模型既不是多對一模型那種完全靠自己調(diào)度的也不是一對一模型完全靠操作系統(tǒng)調(diào)度的,而是中間態(tài)(自身調(diào)度與系統(tǒng)調(diào)度協(xié)同工作),因為這種模型的高度復雜性,操作系統(tǒng)內(nèi)核開發(fā)者一般不會使用,所以更多時候是作為第三方庫的形式出現(xiàn)。
優(yōu)點:
兼具多對一模型的輕量;
由于對應了多個內(nèi)核線程,則一個用戶線程阻塞時,其他用戶線程仍然可以執(zhí)行;
缺點:
Go語言中的goroutine調(diào)度器就是采用的這種實現(xiàn)方案,在Go語言中一個進程可以啟動成千上萬個goroutine,這也是其出道以來就自帶“高并發(fā)”光環(huán)的重要原因。
后面講到Java中的ForkJoinPool的時候,我們會拿Go語言的PMG線程模型來對比講解。
(1)線程分為用戶線程和內(nèi)核線程;
(2)線程模型有多對一模型、一對一模型、多對多模型;
(3)操作系統(tǒng)一般只實現(xiàn)到一對一模型;
(4)Java使用的是一對一線程模型,所以它的一個線程對應于一個內(nèi)核線程,調(diào)度完全交給操作系統(tǒng)來處理;
(5)Go語言使用的是多對多線程模型,這也是其高并發(fā)的原因,它的線程模型與Java中的ForkJoinPool非常類似;
(6)python的gevent使用的是多對一線程模型;
你所學過的語言都是使用的什么線程模型呢?
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享題目:死磕java線程系列之線程模型-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://m.rwnh.cn/article12/djiggc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、全網(wǎng)營銷推廣、網(wǎng)站策劃、App開發(fā)、電子商務、營銷型網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容