程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Socket網絡編程學習筆記(6):使用線程池提高性能(完)

Socket網絡編程學習筆記(6):使用線程池提高性能(完)

編輯:關於.NET

在前幾篇介紹中,不論是服務端的偵聽還是客戶端的連接都是通過新建一個 線程去執行特定功能的。在這種情況下,一量有一個新客戶端需要連接,則又得 創建新的線程,而當程序創建新線程時,往往需要大量的內部開銷,這對程序的 性能有一定的影響。在.NET庫中提供了一種方法,可以避免一些開銷。而在 Socket通訊中還有另一種訪求那就是異步Socket,我不知道用這種方式的性能如 何,在這裡且不管這種形式,主要來看一下用線程池解決問題。

Windows操作系允許用戶維持一池“預先建立的”線程,這個線程 池為應用程序中指定的方法提供工作線索。一個線程控制線程池的操作,並用應 用程序可以分配附加的線程進行處理。在默認情況下,在線程池中有25個預處理 線程,用這種方式可以滿足一些小應用。

如果要為線程池中的線程注冊一個代表,則用下面的格式:

ThreadPool.QueueUserWorkItem(new WaitCallback (Counter));

其中QueueUserWorkItem是ThreadPool類的一個靜態方法;而Counter參數代 表運行在線程中的方法,在這要注意的是該Counter方法必須包含一個object 參 數,這個在下面的例子中有體現;另外,處Thread對象不一樣,代表一旦放置在 線程池查詢中上,將被處理,不需要其他的方法啟動該項工作;當主程序線程退 出,所有的線程池線程都將終止,主線程不會等待線程池線程結束。

下面我們來看看怎麼樣運用到我上面講的例子中去:

原有線程調用:

clientThread = new Thread(new ThreadStart(ReceiveData));
   clientThread.Start();

用線程池只要一句就可以了:

ThreadPool.QueueUserWorkItem(new WaitCallback(ReceiveData));

其它具體的請下載源碼。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved