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