真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Task的運(yùn)行原理和工作竊?。╳orkstealing)-創(chuàng)新互聯(lián)

在net4.0以前,當(dāng)調(diào)用ThreadPool.QueueUserWorkItem方法往線程池中插入作業(yè)時(shí),會(huì)把作業(yè)內(nèi)容(其實(shí)就是一個(gè)委托)放到線程池中的一個(gè)全局隊(duì)列中,然后線程池中的線程按照先進(jìn)先出的方式取出作業(yè),并處理。

創(chuàng)新互聯(lián)-云計(jì)算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、綿陽(yáng)電信機(jī)房機(jī)柜租用、等保安全、私有云建設(shè)等企業(yè)級(jí)互聯(lián)網(wǎng)基礎(chǔ)服務(wù),聯(lián)系電話:18980820575

如下圖中的方式,主程序創(chuàng)建了Item到Queue中,然后分配到了各個(gè)工作線程中。

Task的運(yùn)行原理和工作竊?。╳ork stealing)
但是在.net 4.0以后,線程池做了一些改進(jìn),比如增加了TPL(Task Parallel Library),TPL使用到了.net 4.0中新增加的一些特性。這些特性只能通過(guò)TPL運(yùn)用,不能直接通過(guò)ThreadPool類運(yùn)用 。TPL中的Task并不是線程,Task的執(zhí)行是需要依靠線程池中的線程來(lái)完成的。

創(chuàng)建和啟動(dòng)一個(gè)Task類似調(diào)用ThreadPool.QueueUserWorkItem,但不同的是線程池中的每一個(gè)線程都有一個(gè)本地隊(duì)列。線程池通過(guò)一個(gè)任務(wù)調(diào)度器來(lái)分配任務(wù),當(dāng)主程序創(chuàng)建了一個(gè)Task后,由于創(chuàng)建這個(gè)Task的線程不是線程池中的線程,則任務(wù)調(diào)度器會(huì)把該Task放入全局隊(duì)列中。

如果這個(gè)Task是由線程池中的線程創(chuàng)建,并且未設(shè)置TaskCreationOptions.PreferFairness標(biāo)記(默認(rèn)情況下未設(shè)置),則任務(wù)調(diào)度器會(huì)把該Task放入到該線程的本地隊(duì)列中。如果設(shè)置了TaskCreationOptions.PreferFairness標(biāo)記,則放入全局隊(duì)列。

如下面的演示圖,Task1和Task2都是主程序創(chuàng)建的,因此都是放在全局隊(duì)列中,當(dāng)工作者線程處理Task2時(shí),創(chuàng)建了一個(gè)Task3,此時(shí)Task3被放入本地隊(duì)列

Task的運(yùn)行原理和工作竊?。╳ork stealing)

為什么要設(shè)計(jì)本地隊(duì)列?這樣做的優(yōu)勢(shì)是充分利用并行。隨著越來(lái)越多線程競(jìng)爭(zhēng)工作項(xiàng),所有的線程訪問(wèn)單一的隊(duì)列并不是最優(yōu)的,并且也不安全。所以,將任務(wù)放入本地隊(duì)列,并且由同一個(gè)線程處理,這就避免了競(jìng)爭(zhēng)。
本地隊(duì)列中的Task,線程會(huì)按照LIFO的方式去處理。這是因?yàn)樵诖蠖鄶?shù)場(chǎng)景下,最后創(chuàng)建的Task可能仍然在cache中,處理它能夠提供緩存命中率。顯然這意味放棄部分公平性而保證性能。如下面的演示圖,

工作者線程1創(chuàng)建了Task2,Task2創(chuàng)建了Task3,Task4,Task5,但最先處理的還是Task5。

線程竊取work stealing
當(dāng)A線程開(kāi)始執(zhí)行的時(shí)候,優(yōu)先總是處理本地隊(duì)列中的任務(wù),當(dāng)它發(fā)現(xiàn)本地隊(duì)列已經(jīng)空了,那么它會(huì)去全局隊(duì)列中獲取Task,當(dāng)全局隊(duì)列中也是空的,那么就會(huì)發(fā)生工作竊?。╳ork stealing)。任務(wù)調(diào)度器會(huì)把該線程池中額外的任務(wù)分配給A線程處理,其效果就好比該線程會(huì)才從其他線程的隊(duì)列中“竊取”一個(gè)Task來(lái)執(zhí)行。這樣的目的是提高了cpu的使用效率。

Task的運(yùn)行原理和工作竊?。╳ork stealing)

這種策略是任務(wù)調(diào)度器的默認(rèn)策略,通常是不需要改變的。如果需要改變,需要在創(chuàng)建任務(wù)時(shí),設(shè)置任務(wù)的TaskCreationOptions.PreferFairness。

----------------------

參考資料

http://www.danielmoth.com/Blog/New-And-Improved-CLR-4-Thread-Pool-Engine.aspx

另外有需要云服務(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ù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


文章標(biāo)題:Task的運(yùn)行原理和工作竊?。╳orkstealing)-創(chuàng)新互聯(lián)
文章鏈接:http://weahome.cn/article/dpipcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部