jvm線程池發(fā)展趨勢(shì)-java開發(fā)java經(jīng)驗(yàn)技巧

jvm線程池發(fā)展趨勢(shì)-java開發(fā)java經(jīng)驗(yàn)技巧

ID:30769544

大?。?6.56 KB

頁(yè)數(shù):4頁(yè)

時(shí)間:2019-01-03

jvm線程池發(fā)展趨勢(shì)-java開發(fā)java經(jīng)驗(yàn)技巧_第1頁(yè)
jvm線程池發(fā)展趨勢(shì)-java開發(fā)java經(jīng)驗(yàn)技巧_第2頁(yè)
jvm線程池發(fā)展趨勢(shì)-java開發(fā)java經(jīng)驗(yàn)技巧_第3頁(yè)
jvm線程池發(fā)展趨勢(shì)-java開發(fā)java經(jīng)驗(yàn)技巧_第4頁(yè)
資源描述:

《jvm線程池發(fā)展趨勢(shì)-java開發(fā)java經(jīng)驗(yàn)技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)

1、JVM線程池發(fā)展趨勢(shì)?編程開發(fā)技術(shù)JVM線程池發(fā)展趨勢(shì)木文由ImportNew?fzr翻譯自dzoneo歡迎加入翻譯小組。轉(zhuǎn)載請(qǐng)見文末要求。多線程已經(jīng)成為大多數(shù)開發(fā)者的興趣所在了。他們努力嘗試想找出最優(yōu)策略來(lái)解決這個(gè)問題。過去已經(jīng)有各種嘗試去標(biāo)準(zhǔn)化這些方案。特別是隨著大數(shù)據(jù),實(shí)時(shí)分析等問題領(lǐng)域的興起,又存在著新的挑戰(zhàn)。在這個(gè)方向需要走的一步是“DougLea"的作品(一部巨作),以并發(fā)框架(JSR166)的形式提供給我們?,F(xiàn)在開始區(qū)分并發(fā)和并行性。這些只是不同的策略,而且市面上有很多框架提供,都能幫

2、我們達(dá)到相同的目的。但在選擇的時(shí)候如果能同時(shí)知道他們內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)對(duì)我們也是大有好處的。本文將要探究JVM屮線程池和線程共享的-?些穩(wěn)定有效的選項(xiàng)。當(dāng)然,隨著多核處理器的廣泛使用,新的問題也隨之而來(lái)。開發(fā)人員也開始思考利用高級(jí)硬件的“mechanicalsympathyv(譯者注:表示底層硬件的運(yùn)作方式以及與硬件運(yùn)行方式協(xié)同的軟件編程)來(lái)提高性能。個(gè)人以為,當(dāng)討論線程池時(shí),目前廣泛應(yīng)用的主要有下述機(jī)制:1.Executor框架提供的線程。2.LMAX的RingBuffer概念(譯者注:RingBuf

3、fer即環(huán)形緩沖,LMAX是一種新型零售金融交易平臺(tái),其框架能以低延遲產(chǎn)牛?大量交易,LMAX建立在JVM平臺(tái)上。3.基于Actor(事件)的實(shí)現(xiàn)。并發(fā)框架下的線程池選項(xiàng):首先,我個(gè)人不贊同使用當(dāng)卜?流行的線程池概念,而應(yīng)該使用工作隊(duì)列的概念。簡(jiǎn)而言Z,在一個(gè)執(zhí)行框架可供選擇的各種不同選項(xiàng)都是基于某種順序數(shù)據(jù)結(jié)構(gòu),如數(shù)組或隊(duì)列(阻塞或非阻塞)之類的,比如ConcurrentLinkedQueue(并發(fā)鏈?zhǔn)疥?duì)列),ArrayBlockingQueue(數(shù)組阻塞隊(duì)列),LinkedBlockingQue

4、ue(鏈?zhǔn)阶枞?duì)列)等等。文檔表明,盡管它們的使用環(huán)境各不相同,但他們隱含的木質(zhì)/數(shù)據(jù)結(jié)構(gòu)有相同的性質(zhì),如順序插入和遍歷。Queuew優(yōu)勢(shì):1.減少線程創(chuàng)建導(dǎo)致的延遲2.通過優(yōu)化線程數(shù)量,可以解決資源不足的問題。這些可以使應(yīng)用程序和服務(wù)器應(yīng)用響應(yīng)更快。使用線程池看似-?個(gè)很不錯(cuò)的解決方案但是卻有一個(gè)根本性的缺陷:連續(xù)爭(zhēng)用問題。這里是Java中關(guān)于一些并發(fā)框架下線程池選項(xiàng)的討論。Disruptor(環(huán)形緩沖):(LMAX的一個(gè)基于環(huán)形緩沖區(qū)的高性能進(jìn)程間消息庫(kù))LMAX的開發(fā)人員使用一個(gè)干擾框架來(lái)解決

5、連續(xù)爭(zhēng)用問題,這個(gè)框架是基于一個(gè)叫環(huán)形緩沖的數(shù)據(jù)結(jié)構(gòu)。它可能是線程間發(fā)送消息的最有效方式了。它是隊(duì)列的一種替代實(shí)現(xiàn)方式,但它又和SEDA和Actors(譯者注:這兩種都是和Disruptor類似的并發(fā)模型)有一些共同特征。向Disruptor屮放入消息需要兩步,第一步中請(qǐng)一個(gè)環(huán)形緩沖的槽位,槽位可為用戶提供寫對(duì)應(yīng)數(shù)據(jù)的記錄。然后需要提交該條記錄,為了能靈活使用內(nèi)存,2步法是必須的。只有經(jīng)過提交,這條消息才能對(duì)消費(fèi)者線程可見。下圖描述了壞狀緩沖這個(gè)數(shù)據(jù)結(jié)構(gòu)(Disruptor的核心):(譯者注:LMA

6、X的核心是一個(gè)業(yè)務(wù)邏輯處理器,而該業(yè)務(wù)邏輯處理器的核心是Disruptor,這是一個(gè)并發(fā)組件,能夠在無(wú)鎖的情況下實(shí)現(xiàn)網(wǎng)絡(luò)的Queue并發(fā)操作)Disruptor在多核平臺(tái)上能達(dá)到很低的延遲同時(shí)又有高吞吐量,盡管線程程間需要共享數(shù)據(jù)以及傳遞消息。它的獨(dú)特Z處在于鎖和免爭(zhēng)用結(jié)構(gòu)。它甚至不使用CAS或內(nèi)存保護(hù)。若想了解關(guān)于它的更多細(xì)節(jié),這里有一篇不錯(cuò)的文章和官網(wǎng)。使用Disruptor的一個(gè)缺點(diǎn)(事實(shí)上也算不上缺點(diǎn))是,你需要提前告知Disruptor應(yīng)用程序完成任務(wù)所需要的線程數(shù)?;谑录?對(duì)于傳統(tǒng)線程

7、池機(jī)制,一個(gè)強(qiáng)大的替代方案就是基于事件模型。這種基于事件的線程輪詢/線程池/線程調(diào)度機(jī)制在函數(shù)式編程中很常見。關(guān)于這個(gè)概念的一個(gè)非常流行的實(shí)現(xiàn)是基于actor的系統(tǒng)(譯者注:Scala的并發(fā)系統(tǒng)),Akka已成為其實(shí)際上的標(biāo)準(zhǔn)。(譯者注:汕畑,?種善于處理進(jìn)程間通信的框架)Actors是非常輕量級(jí)的并發(fā)實(shí)體。它們使用一種事件驅(qū)動(dòng)的接收循壞來(lái)異步處理消息。消息模式匹配可以很方便地表述一個(gè)actor的行為。它們提高了抽彖級(jí)別從而使寫,測(cè)試,理解和維護(hù)并發(fā)/分布式系統(tǒng)更加容易。讓你專注于工作流——消息如何

8、流入系統(tǒng)——而不是低層次的基木概念如線程,鎖以及套接字IOo一個(gè)線程可以分配多個(gè)或單個(gè)actor,而且兩種模型都是依需要選擇的。像Akka這種基于actor的系統(tǒng)的優(yōu)勢(shì)冇如下所列:可封裝可監(jiān)督可配置執(zhí)行位置透明重試機(jī)制注:調(diào)試一個(gè)基于actor的系統(tǒng)是一個(gè)非常艱難的事情。Disruptor使用一個(gè)線程一個(gè)消費(fèi)者模式,不同于Actors使用N個(gè)線程M個(gè)消費(fèi)者模式。比如,你可以擁有任意多的actors,然后它們會(huì)被分散到一些數(shù)目固定的線程屮(通常是-個(gè)核-個(gè)線程),至于其

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。