C#非同步編程的實現方式(3)——ThreadPool線程池

來源:互聯網
上載者:User

在需要建立的線程很多,且都是比較小的線程的情況下,可以使用線程池(ThreadPool類)。ThreadPool是一個靜態方法,提供了對一個線程集合的操作,它會線上程數不足時增加線程,空閑線程數過多時釋放資源。

 

1、ThreadPool簡單應用

調用ThreadPool.QueueUserWorkItem()方法,傳遞一個WaitCallBack委託類型的方法,並把這個方分配給線程池中的線程。線程池是自動啟動並執行,如果線程池還沒有運行,就會建立一個線程池,並啟動第一個線程。如果線程池己經在運行,且有一個空閑線程來完成該任務,就把該作業傳遞給這個線程。

下面這個方法是一個符合WaitCallBack委託的方法:

   1: static void WaitCallBackMethod(object param)
   2: {
   3:     for (int i = 0; i < 5; i++)
   4:     {
   5:         Console.WriteLine(String.Format("Thread {0} is running", param));
   6:         Thread.Sleep(1000);
   7:     }
   8: }

然後在主線程裡給線程池添加方法:

   1: static void Main(string[] args)
   2: {
   3:     for (int i = 1; i <= 3; i++)
   4:     {
   5:         ThreadPool.QueueUserWorkItem(WaitCallBackMethod, i);
   6:     }
   7:     Console.Read();
   8: }

QueueUserWorkItem()方法的第二個參數是個object類型的參數,可傳入一個資料到線程中。在主線程中,傳入了3個方法到線程池中。運行結果如下:

可以看見三個線程分別在行動。順序不一樣是因為作業系統調度的原因。

 

2、最大與最小線程數

ThreadPool類會在需要時增減池中線程的線程數,直到最大的線程數。池中的最大線程數是可配置的。在雙核CPU中,預設設定為1023個背景工作執行緒和1000個I/O線程。也可以指定在建立線程池時應立即啟動的最小線程數,以及線程池,中可用的最大線程數。如果有更多的作業要處理,線程池中線程的個數也到了極限,最新的作業就要排隊,且必須等待線程完成其任務。

可用下面的方法查看:

   1: static void MaxThreads()
   2: {
   3:     int workerThreads;
   4:     int ioThreads;
   5:  
   6:     ThreadPool.GetMaxThreads(out workerThreads, out ioThreads);
   7:     Console.WriteLine(String.Format("Max worker threads: {0};    Max I/O threads: {1}", workerThreads, ioThreads));
   8:  
   9:     ThreadPool.GetMinThreads(out workerThreads, out ioThreads);
  10:     Console.WriteLine(String.Format("Min worker threads: {0};    Min I/O threads: {1}", workerThreads, ioThreads));
  11: }

結果為:

 

3、線程池的限制

  • 線程池中的所有線程都是後台線程。如果進程的所有前台線程都結束了,所有的後台線程就會停止。不能把入池的線程改為前台線程。
  • 不能給入池的線程設定優先權或名稱。
  • 對於COM對象,入池的所有線程都是多執行緒 Apartment(Multithreaded Apartment,MTA)線程。許多COM對象都需要單一執行緒 Apartment(Multithreaded Apartment,MTA)線程。
  • 入池的線程只能用於時間較短的任務。如果線程要一直運行(如Word的拼字檢查器線程),就應使用Thread類建立一個線程。

 

參考資料:《C#進階編程》

 http://www.cnblogs.com/sosowjb/archive/2012/08/11/2633793.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.