C# 線程池ThreadPool的用法簡析

來源:互聯網
上載者:User

標籤: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的用法簡析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.