国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:11:59
字體:
來源:轉載
供稿:網友

  這個內容在cnblogs中也討論過很多次了,這兩天大概看了一些資料,看到一些簡單的性能指標拿出來和大家討論一下。

  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能實現多少最大連接,沒有資料可以查,如果有朋友知道,可以討論一下。另外上面提到的許多數據,是從一些資料上摘抄下來的,我沒有自己試過,僅僅是拿出來和大家討論一下。我想,一個高性能的服務端程序,可能需要的技術不僅僅是采用什么模型,還有許多細節需要注意,比如內存的處理,采用什么算法等等,當然,這僅僅是軟件成本上的,硬件上肯定也是需要投入的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武冈市| 德格县| 什邡市| 溆浦县| 双牌县| 二连浩特市| 抚宁县| 隆子县| 宝丰县| 唐山市| 南投县| 南充市| 平罗县| 乃东县| 定安县| 宜春市| 梨树县| 昂仁县| 黑龙江省| 乐亭县| 高密市| 鄂伦春自治旗| 鞍山市| 林口县| 辉南县| 平顺县| 日喀则市| 安龙县| 麟游县| 仁化县| 安宁市| 卢龙县| 嘉荫县| 曲沃县| 石家庄市| 东辽县| 高碑店市| 怀宁县| 盖州市| 东阿县| 汕头市|