摘要:本周提交的一份增強建議草案要求將虛擬線程作為標準版的一部分進行預(yù)覽。虛擬線程目的是更好地支持編寫和維護高吞吐量并發(fā)應(yīng)用程序。該提案指出,使用虛擬線程不需要學(xué)習(xí)新的編程模型。
我們知道 Go 語言最大亮點之一就是原生支持并發(fā),這得益于 Go 語言的協(xié)程機制。一個 go 語句就可以發(fā)起一個協(xié)程 (goroutin)。
協(xié)程本質(zhì)上是一種用戶態(tài)線程,它不需要操作系統(tǒng)來進行調(diào)度,而是由用戶程序自行管理和調(diào)度。它寄存于線程中,系統(tǒng)開銷極小,可以顯著的提高性能和并發(fā)能力。使用協(xié)程的優(yōu)點是運行效率高、編程簡單、結(jié)構(gòu)清晰。目前,原生支持協(xié)程的語言不是很多。
Oracle 本周提交的一份JDK增強建議(JEP)草案要求將虛擬線程作為Java標準版的一部分進行預(yù)覽。
虛擬線程類似于 Go 語言的協(xié)程,將補充Java的平臺線程(代表操作系統(tǒng)線程),采用輕量級的用戶模式線程實現(xiàn),將更有效地利用可用的硬件,并大大降低成本。
虛擬線程目的是更好地支持編寫和維護高吞吐量并發(fā)應(yīng)用程序。
該提案指出,線程對于代表一個并發(fā)單元(如事務(wù))是很有用的。Java目前對Thread的實現(xiàn)是為每個Java線程消耗一個操作系統(tǒng)線程,而操作系統(tǒng)線程是稀缺和昂貴的。現(xiàn)代服務(wù)器的能力可以處理比操作系統(tǒng)線程更多數(shù)量級的并發(fā)事務(wù)。
編寫高吞吐量服務(wù)器軟件的開發(fā)者不得不在事務(wù)之間共享線程,以有效利用硬件。這是用線程池來完成的,它將線程借給一個又一個事務(wù),以節(jié)省為每個事務(wù)創(chuàng)建線程的成本。當(dāng)這還不夠時,開發(fā)人員開始將線程返回到線程池中,甚至在事務(wù)的中間,在等待I/O的時候。但是,這導(dǎo)致了一種異步的編程風(fēng)格,需要一套獨立的、不兼容的API,并使故障排除、調(diào)試、觀察和分析變得非常困難。
虛擬線程是java.lang.Thread的用戶模式實現(xiàn),它不會阻塞操作系統(tǒng)線程,能夠?qū)崿F(xiàn)接近最佳的硬件利用率。虛擬線程允許高水平的并發(fā),以及高吞吐量,同時程序仍然與Java平臺和工具的基于線程的設(shè)計相協(xié)調(diào)。虛擬線程對于平臺線程來說,就像虛擬內(nèi)存對于物理RAM一樣:一種通過自動映射到底層物理資源而提供豐富的 "虛擬 "資源的機制。
該提案指出,使用虛擬線程不需要學(xué)習(xí)新的編程模型。使用Java編寫并發(fā)應(yīng)用程序的開發(fā)者已經(jīng)知道這個模型。然而,開發(fā)人員需要改變由于線程的高成本而產(chǎn)生的舊習(xí)慣,特別是使用線程池,這些線程池只有在它們所匯集的資源稀缺或創(chuàng)建成本高昂時才有用。
虛擬線程是由JDK實現(xiàn)的java.lang.Thread的實例,它允許許多活動實例在同一進程中共存。虛擬線程的語義與平臺線程相同,只是它們屬于單一的ThreadGroup,不能被枚舉。
?
參考資料:
1.?進程、線程和協(xié)程的區(qū)別
2. 編程寶庫
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/123994.html
摘要:經(jīng)過半年的沉淀,加上對,和分布式這塊的補齊,終于開始重拾面試信心,再次出征。面試官提示沒有提到線程的有內(nèi)核態(tài)的切換,程只在用戶態(tài)調(diào)度。三面綜合技術(shù)面這面面的是陣腳大亂,面試官采用刨根問底的方式提問,終究是面試經(jīng)驗不夠,導(dǎo)致面試的節(jié)奏有點亂。 經(jīng)過半年的沉淀,加上對MySQL,redis和分布式這塊的補齊,終于開始重拾面試信心,再次出征。 鵝廠 面試職位:go后端開發(fā)工程師,接受從Jav...
摘要:前言并發(fā)編程的目的是讓程序跑的更快,但并不是啟動更多的線程,這個程序就跑的更快。盡可能降低上下文切換的次數(shù),有助于提高并發(fā)效率。死鎖并發(fā)編程中的另一挑戰(zhàn)是死鎖,會造成系統(tǒng)功能不可用。 前言 并發(fā)編程的目的是讓程序跑的更快,但并不是啟動更多的線程,這個程序就跑的更快。有以下幾種挑戰(zhàn)。 挑戰(zhàn)及方案 上下文切換 單核CPU上執(zhí)行多線程任務(wù),通過給每個線程分配CPU時間片的方式來實現(xiàn)這個機制。...
摘要:概述本系列文章將從開發(fā)者角度梳理開發(fā)實時聯(lián)網(wǎng)游戲后臺服務(wù)過程中可能面臨的挑戰(zhàn),并針對性地提供相應(yīng)解決思路,期望幫助開發(fā)者依據(jù)自身游戲特點做出合理的技術(shù)選型。多路復(fù)用避免了讀寫阻塞,減少了上下文切換,提升了利用率和系統(tǒng)吞吐率。 概述:本系列文章將從開發(fā)者角度梳理開發(fā)實時聯(lián)網(wǎng)游戲后臺服務(wù)過程中可能面臨的挑戰(zhàn),并針對性地提供相應(yīng)解決思路,期望幫助開發(fā)者依據(jù)自身游戲特點做出合理的技術(shù)選型。 關(guān)...
摘要:它避免了上下文切換的額外耗費,兼顧了多線程的優(yōu)點,簡化了高并發(fā)程序的復(fù)雜。而可以理解為一種語言的協(xié)程。線程輕量級進程,,是程序執(zhí)行流的最小單元。一個標準的線程由線程,當(dāng)前指令指針,寄存器集合和堆棧組成。其實就是或者等語言中的多線程開發(fā)。 grape 全部視頻:https://segmentfault.com/a/11... 原視頻地址:https://biglive.xueersi.c...
摘要:因為多線程競爭鎖時會引起上下文切換。減少線程的使用。舉個例子如果說服務(wù)器的帶寬只有,某個資源的下載速度是,系統(tǒng)啟動個線程下載該資源并不會導(dǎo)致下載速度編程,所以在并發(fā)編程時,需要考慮這些資源的限制。 最近私下做一項目,一bug幾日未解決,總惶恐。一日頓悟,bug不可怕,怕的是項目不存在bug,與其懼怕,何不與其剛正面。 系列文章傳送門: Java多線程學(xué)習(xí)(一)Java多線程入門 Jav...
閱讀 2786·2021-11-19 11:30
閱讀 3068·2021-11-15 11:39
閱讀 1792·2021-08-03 14:03
閱讀 1998·2019-08-30 14:18
閱讀 2054·2019-08-30 11:16
閱讀 2168·2019-08-29 17:23
閱讀 2610·2019-08-28 18:06
閱讀 2544·2019-08-26 12:22