當前位置:編程學習大全網 - 編程語言 - .NET平臺下幾種SOCKET模型的簡要性能供參考

.NET平臺下幾種SOCKET模型的簡要性能供參考

Socket + Threads/ThreadPool

大概性能:小於1500個連接 實現:Accept壹個Socket,就交給壹個線程去管理,比較笨,但也比較有效,因為是同步方式,控制起來很方便。高級點的,就是交給壹個線程池去管理,線程池由系統自動托管,省去了開銷線程的時間。壹般小型項目,用這個完全足夠,開發也簡單。但要註意,如果若幹Socket長時間占用線程池中的線程,同時其它連接數又比較多,很容易出現提示說妳沒有足夠的線程供使用。呵呵,讓Socket少做點事,少占用時間,換壹個快點的CPU是不錯的方式。另外,如果有壹些比較好的第三方線程池組件,也可以選擇使用,比如SmartThreadPool。Socket + Select

大概性能:大於1500個連接後性能下降 實現:Select是很常用的壹種模型。是在阻塞功能中輪詢壹個或多個Socket,將要處理的Socket放到壹個IList中,當Select輪詢結束後,然後我們再自己處理這個IList中的Socket。具體的用法可以看壹下MSDN。Select的效率並不能說是高的,因為當隊列中待處理的Socket比較多的時候,處理最後幾個Socket相當於要遍歷所有前面的Socket,非常不劃算的。

Socket + Asynchronous

大概性能:約7500個客戶端連接 實現:BeginXXXX,EndXXXX,再熟悉不過了吧。異步Socket歸根到底,還是用的線程池技術,用線程池來處理異步IO。這就又引出個問題,.NET的線程池又是用的什麽實現方式,以前看過有人說,.NET的線程池是用的完成端口來實現的,我不知道這樣的說法是不是正確,從查到的資料中也沒有辦法確認(希望這點有朋友可以告訴我)。異步Socket對於程序的處理流程來說比同步復雜了許多,異步回調函數的控制不如同步方式那樣直觀。但有壹點我想應該是要註意的,就是回調函數應該輕裝上陣,不應該處理過多的事務,對傳遞數據的處理,應該交給其它線程進行處理。 IOCP(完成端口)

大概性能:約20000~50000個客戶端連接 實現:現在.NET下有壹些偽IOCP,大家可以去搜索壹下,還沒有見過開放出來的用這些偽IOCP來實現的SOCKET例子。我說的20000~50000個客戶端連接,是指在C++下開發的情況,這樣的情況下,需要用到的基本技術還包括內存池、查詢算法等。 偽IOCP能實現多少最大連接,沒有資料可以查,如果有朋友知道,可以討論壹下。另外上面提到的許多數據,是從壹些資料上摘抄下來的,我沒有自己試過,僅僅是拿出來和大家討論壹下。

  • 上一篇:考博(從計算機轉物理)選什麽專業?謝謝
  • 下一篇:做壹個會說話的媽媽讀後感怎麽寫
  • copyright 2024編程學習大全網