關鍵詞:IOCP TcpServer TcpClient 完成端口 服務器 達到6萬連接 突破連接限制 壓力測試工具 堵塞鎖 非堵塞鎖 無鎖 Lock Free 并發隊列 并發可擴充環形隊列
首先感謝在行動和精神上給予本人支持的各位同行,在過去的日子,使得本人的IOCP研究進入了嶄新的領域。本文及附件希望能給予更多人的幫助,限于商用等原因,除了原來的0.85版開源之外,更高版本不便開源,僅簡單描述一些技術要點,請諒解。但附件的壓力工具源碼,仍然能給予很多幫助,比如封包、解包、處理粘包等,同是壓力工具還能幫助開發者測試服務器的性能,而且此幫助并不僅僅是一般的幫助。(其他的IOCP方法網上都有介紹,這里不多說。)
一、TcpServer
1、結構及流程

A、看守線程負責響應接受投遞不足時的事件并投遞接受請求,同是處理空連接和心跳超時
B、工作線程負責處理讀寫完成及讀寫錯誤的處理,并投遞給處理線程
C、由于在工作處理數據及進行文件和數據庫讀寫等操作可能會造成通信“卡”的現象,因此增加了處理線程,通過完成隊列和線程池,接受工作線程投遞過來的事件,處理線程通過回調函數將IO操作結果傳遞給應用層,應用層完全可以在回調函數里處理數據,從而實現了0拷貝功能,并保證數據的有序處理。
2、運行信息
為能更好的測試模塊,開發者可參考截圖的信息內容,對自己的模塊進行測試開發工作,以幫助觀察運行情況判斷問題所在。


二、不可忽視的關閉工作
很多人在關閉通訊模塊的時候,關閉所有連接和線程然后把記錄的所有的內存都一一釋放就結束了關閉工作。這樣盡管沒有內存泄露,但卻可能隱蔽了其他問題。
正確的做法是:
1、關閉監聽
2、關閉所有在線連接
3、等待關鍵計數器(內存池、連接池等使用計數器)歸零 (這一步非常重要,這步過不了關肯定有問題)
4、關閉所有線程
5、逐一釋放內存資源
6、變量復位
三、后IOCP時代
個人認為,微軟的IOCP模型并不是Windows socket的終極,IOCP部分功能和效率仍然有待改進,以及Windows socket接口仍然不是高效率的體現,對開發有高要求的人,尤其是研究過Win2000源碼的人,更深有體會。大家都知道,凡是滿足功能強大的軟件,效率在一定程度上會打折扣,針對高效率模型提供專有的Socket API才是關鍵,而不是一個API通用任何模型。微軟到底是改進現有功能呢,還是提供更有效率的模型,這個只有微軟才知道了。
四、IOCP的更高境界
入題前先給線程同步的鎖分類:1、堵塞鎖:系統提供的內核態的同步機制(內核態切換的效率眾所周知),2.、非堵塞鎖:諸如LockFree等使用原子操作指令完成的同步機制,3、無鎖:堵塞鎖、非堵塞鎖之外的同步機制,確實的說是沒有鎖的機制。網絡及書本上介紹的IOCP,常用做法都是使用堵塞鎖的方式,打破傳統思維才能獲得創新。在過去的日子中,本人已經實現了非堵塞鎖并發同步的IOCP模塊。并根據IOCP Tcp Server的特殊情況,能在多線程下某些競爭的地方不使用鎖亦能實現并發式同步的功能。這個模塊實現,需要對IOCP Tcp Server的數據結構(主要是隊列)進行深入分析,根據實時性、使用頻率等歸納總結,判斷出:哪些需要立即處理的,哪些可以暫緩處理而又不影響效率的,哪些需要鎖的,哪些不需要鎖的,哪些需要堵塞鎖的,哪些不需要堵塞鎖的,需要堵塞鎖的能不能換個角度可以使用非堵塞鎖來解決等。
五、附件
1、突破連接限制的注冊表設置方法及工具
比較全面的介紹突破連接限制。
2、功能相當強大的壓力測試工具的源碼、G-TcpClient.Lib(限制版)
有助于開發者學習和制作測試壓力測試工具,另有封包、解包、處理粘包等。G-TcpClient.Lib是限制版,主要是和壓力工具配套方便學習壓力工具源碼。
3、堵塞鎖模式的服務器Exe、堵塞鎖模式的壓力測試工具exe
有助于測試自己的服務器和客戶端。壓力測試工具單機可以達到6萬連接,附有說明書。


附件下載鏈接:
http://download.csdn.net/source/2566607
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
