IOCP在實際項目中應用的小技巧

Windows下,IOCP 本身是很優秀的網絡IO模型,但是,如果用的不好,反而會降低效率。有幾點,大家如果稍微注意一下,會取得更好的效果。

簡單的說幾點:

1)IOCP 線程的個數,微軟給出來的CPU個數×2+2的算法並不好,實際上( CPU個數+3 ) × 2 / 2 效果更好。

2)IOCP 線程的優先級最好設置爲Blow Normal。呵呵,這一點很多人都想不到吧。低一點的線程優先級,反而會讓系統更順暢。

3)IOCP 的先天缺陷是連接數越多,越影響效率,通過進程觀察器可以看到,同樣的流量下,連接數越多,CPU消耗越大。

4)千萬別以爲一個進程只能擁有一個完成端口,多個完成端口往往能有效的改善多併發數下的CPU表現。

5)另外一個影響IOCP效率的因素是網絡或者總線的帶寬,如果帶寬被佔滿,會極大的加劇CPU的消耗。舉個例子,通過localhost創建echo server/client的測試環境,你就可以發現,當連接數增加到一定程度後,CPU消耗會顯著的增加,同時,傳輸速率會趨於極限,再也上不去了。

6)Accept也可以通過IOCP來提醒完成。

7)內存池能極大的改善網絡層的表現。

8)VTune 是個好工具,可以有效的觀察到系統的熱點,當你有一天,發現VTune找出的熱點都是WSASend或者WSARecv之類的函數時,恭喜你,你已經修行圓滿了。

9)最後,IOCP線程最好別去做消息切割之類的重體力活。讓IOCP線程專注於服務吧,消息切割用專門的線程來處理最好(多個,千萬別是單線程)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章