您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān).NET線程池技術(shù)實(shí)現(xiàn)多任務(wù)批量處理的實(shí)例分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
本期同樣帶給大家分享的是阿笨在實(shí)際工作中遇到的真實(shí)業(yè)務(wù)場景,請跟隨阿笨的視角去如何采用基于開源組件SmartThreadPool線程池技術(shù)實(shí)現(xiàn)多任務(wù)批量處理。
在工作中您是否遇到過如何快速高效的處理Job任務(wù)列表、如何通過多線程批量處理訂單、如何多線程群發(fā)短信、如何批量上傳圖片到遠(yuǎn)程服務(wù)器或者云服務(wù)器、如何通過多線程讓應(yīng)用程序提高對CPU的利用率從而增加應(yīng)用程序的處理效率,等等。
如果您有遇到類似的業(yè)務(wù)場景的而感到煩惱的話,那么今天您看完阿笨的分享課后下次碰到這類疑難雜癥的問題一定不再困惑,思緒一下子會豁然開朗。如果您對本期的教程內(nèi)容感興趣,那么大家跟著阿笨一起學(xué)習(xí)吧!
廢話不多說,直接上干貨,我們不生產(chǎn)干貨,我們只是干貨的搬運(yùn)工。
2.1、什么是線程(Thread)和線程池(ThreadPool)?
線程(Thread):是Windows任務(wù)調(diào)度的最小單位。線程是程序中的一個執(zhí)行流,每個線程都有自己的專有寄存器(棧指針、程序計(jì)數(shù)器等),但代碼區(qū)是共享的,即不同的線程可以執(zhí)行同樣的函數(shù),在一個應(yīng)用程序中,常常需要使用多個線程來處理不同的事情,這樣可以提高程序的運(yùn)行效率,也不會使主界面出現(xiàn)無響應(yīng)的情況。
線程池(TheadPool):基本思想還是一種對象池的思想,開辟一塊內(nèi)存空間,里面存放了眾多(未死亡)的線程,池中線程執(zhí)行調(diào)度由線程池管理器來處理。當(dāng)有線程任務(wù)時,從池中取一個,執(zhí)行完成后線程對象歸池,這樣可以避免反復(fù)創(chuàng)建線程對象所帶來的性能開銷,節(jié)省了系統(tǒng)的資源。
2.2、為什么有了Thread還需要ThreadPool?
如果你的代碼涉及了大量使用Thread,那么有可能會超過系統(tǒng)最大的線程數(shù)導(dǎo)致崩潰,而且每次創(chuàng)建和銷毀線程也是很耗資源,由于線程池中的線程已經(jīng)準(zhǔn)備好且等待被分配任務(wù),應(yīng)用程序可以直接拿來使用而不用新建一個線程。所以使用ThreadPool就可以幫你提高代碼效率并管理你的線程。使用ThreadPool的好處如下:
減少線程間上下文切換。線程執(zhí)行一定的時間片后,系統(tǒng)會自動把cpu切換給另一個線程使用,這時還需要保存當(dāng) 前的線程上下文狀態(tài),并加載新線程的上下文狀態(tài)。當(dāng)程序中有大量的線程時,每個線程分得的時間片會越來越少,可能會出現(xiàn)線程未處理多少操作,就需要切換到 另一線程,這樣頻繁的線程間上下文切換會花費(fèi)大量的cpu時間。
減少內(nèi)存占用。系統(tǒng)每創(chuàng)建一條物理線程,需要大概花費(fèi)1MB的內(nèi)存空間,許多程序喜歡先創(chuàng)建多條物理線程,并 周期輪詢來處理各自的任務(wù),這樣既消耗了線程上下文切換的時間,還浪費(fèi)了內(nèi)存。這些任務(wù)可能只需要一條線程就能滿足要求。假如某一任務(wù)需要執(zhí)行較長的周 期,線程池還可以自動增加線程,并在空閑時,銷毀線程,釋放占用的內(nèi)存。
2.3、為什么強(qiáng)烈推薦使用SmartThreadPool而不是.Net默認(rèn)的ThreadPool?
.Net默認(rèn)的線程池(ThreadPool)是一個靜態(tài)類,所以是沒辦法自己創(chuàng)建一個新的程序池的。默認(rèn)的線程池與應(yīng)用程序域 (AppDomain)掛鉤,一個AppDomain只有一個線程池。假如在線程池中執(zhí)行了一個周期較長的任務(wù),一直占用著其中一個線程,可能就會影響到 應(yīng)用程序域中的其他程序的性能。例如,假如在Asp.Net的線程池中執(zhí)行一個周期較長的任務(wù),就會影響請求的并發(fā)處理能力(線程池默認(rèn)有個最大線程 數(shù))。
SmartThreadPool是大名鼎鼎的.Net線程池項(xiàng)目,基于.Net開發(fā),比.Net內(nèi)置的線程池更勝一籌。顧名思義,智能線程池.一定比NET自帶的線程池有過人之處.不然也沒有必要再搞個出來了。
SmartThreadPool重要特性總結(jié)如下:
可創(chuàng)建線程池實(shí)例。
可動態(tài)調(diào)整線程池工作線程數(shù)量。
WorkItem 可以返回信息、調(diào)用者可等待多個或全部 WorkItem 執(zhí)行結(jié)束。
可以設(shè)置 WorkItem 優(yōu)先級。
等等......
4.1、WinForm桌面應(yīng)用程序開發(fā)小技術(shù)和技能。如下:
1、比如System.Threading.Timer定時器在實(shí)際項(xiàng)目中的大量靈活運(yùn)行。
2、如何快速的通過阿笨提供的控件庫實(shí)現(xiàn)桌面應(yīng)用程序的UI美化和人性化布局。
3、C#中使用Settings.settings來存儲用戶自定義配置文件。
4、C#如何快速的創(chuàng)建Windows服務(wù)應(yīng)用程序。
5、C#如何支持批處理文件(bat)以及如何通過批處理指令連接遠(yuǎn)程服務(wù)器建立本地映射盤。
等等......
4.2、阿笨本次分享課將給大家?guī)碓趯?shí)際項(xiàng)目中的三種技術(shù)解決辦案如何采用多線程技術(shù)來實(shí)現(xiàn)多任務(wù)的批量處理。以后碰到這樣的通用的業(yè)務(wù)場景時,你會感覺到“手到擒來,得心應(yīng)手”。如下:
1、如何使用SmartThreadPool線程池技術(shù)實(shí)現(xiàn)多任務(wù)的批量處理。(強(qiáng)烈推薦)
2、如何使用.NET默認(rèn)自帶的ThreadPool線程池技術(shù)實(shí)現(xiàn)多任務(wù)的批量處理。
3、如何使用.NET 4.5異步編程Task技術(shù)實(shí)現(xiàn)多任務(wù)的批量處理。
4.3、第三方開源組件的基本使用
1、日志框架,Nlog和Log4net。
2、序列化組件json.net。
2、如何使用開源Topshelf組件創(chuàng)建Windows服務(wù)。
5.1、github源碼地址:
https://github.com/amibar/SmartThreadPool
5.2、NuGet進(jìn)行在線下載:
Install-Package SmartThreadPool.dll
5.3、演示SmartThreadPool如何實(shí)現(xiàn)等待多個Job任務(wù)執(zhí)行完成
看完上述內(nèi)容,你們對.NET線程池技術(shù)實(shí)現(xiàn)多任務(wù)批量處理的實(shí)例分析有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。