標籤:cal strong 其他 多線程 csdn work reads use 基本
52460566
什麼是線程池?為什麼要用線程池?怎麼用線程池?
1. 什麼是線程池?
.NET Framework的ThreadPool類提供一個線程池,該線程池可用於執行任務、發送工作項目、處理非同步 I/O、代表其他線程等待以及處理計時器。那麼什麼是線程池?線程池其實就是一個存放線程對象的“池子(pool)”,他提供了一些基本方法,如:設定pool中最小/最大線程數量、把要執行的方法排入隊列等等。ThreadPool是一個靜態類,因此可以直接使用,不用建立對象。
2. 為什麼要用線程池?好處是什嗎?
微軟官網說法如下:許多應用程式建立大量處於睡眠狀態,等待事件發生的線程。還有許多線程可能會進入休眠狀態,這些線程只是為了定期喚醒以輪詢更改或更新的狀態資訊。 線程池,使您可以通過由系統管理的背景工作執行緒池來更有效地使用線程。
說得簡單一點,每建立一個線程都需要佔用記憶體空間和其他資源,而建立了那麼多線程,有很多在休眠,或者在等待資源釋放;又有許多線程只是周期性的做一些小工作,如重新整理資料等等,太浪費了,划不來,實際編程中大量線程突發,然後在短時間內結束的情況很少見。於是,就提出了線程池的概念。線程池中的線程執行完指定的方法後並不會自動消除,而是以掛起狀態返回線程池,如果應用程式再次向線程池發出請求,那麼處以掛起狀態的線程就會被啟用並執行任務,而不會建立新線程,這就節約了很多開銷。只有當線程數達到最大線程數量,系統才會自動銷毀線程。因此,使用線程池可以避免大量的建立和銷毀的開支,具有更好的效能和穩定性,其次,開發人員把線程交給系統管理,可以集中精力處理其他任務。
3. 怎麼使用線程池?
其實線程池使用起來很簡單,如下
a.設定線程池最大最小:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads)
設定可以同時處於活動狀態的線程池的請求數目。所有大於此數目的請求將保持排隊狀態,直到線程池線程變為可用。還可以設定最小線程數。
b.將任務添加進線程池:
ThreadPool.QueueUserWorkItem(new WaitCallback(方法名));
或
ThreadPool.QueueUserWorkItem(new WaitCallback(方法名), 參數);
舉個小例子,線程池中最多5個線程,執行一個方法60次,算5年總工資,如下:
如果不採用線程池,恐怕要開60線程非同步執行Run()方法,空間資源之浪費,可見一斑。而現在我們最多用了5個線程,1秒內即可執行完畢,效率、效能都很好。
C# 線程池ThreadPool的用法簡析