完成端口CreateIoCompletionPort編寫高性能的網絡模型程序


1、同步網絡模型:就是服務端同步阻塞等待客戶端的請求,然后繼續操作后續處理,缺點是性能低。
2、同步通訊+多線程模型:服務端為每個客戶端分配線程,這個線程就負責這個客戶端,同步通訊,同步處理這個客戶端的請求,
   缺點就是當客戶端很多時,線程很多,CPU在卻換線程的上下文時會消耗很多資源,最終會導致CPU只用於處理上下文的卻換而
   無法正常處理線程后續的流程操作
3、完成端口,是微軟提供的高性能網絡處理API,底層會建立一個請求隊列,並且分配幾個線程等待處理。每個線程從隊列里取請求
   處理,處理完成后通知應用程序接收數據。然后繼續從隊列取數據繼續處理。這幾個線程會公平的處理數據。

完成端口函數原型
HANDLE CreateIoCompletionPort (
  HANDLE  FileHandle , // handle to file
HANDLE  ExistingCompletionPort , // handle to I/O completion port
  ULONG_PTR  CompletionKey , // completion key
  DWORD  NumberOfConcurrentThreads // number of threads to execute concurrently
);
我們使用時:
HANDLE m_hIOCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0 ); 
最后一個參數NumberOfConcurrentThreads 當前線程執行個數,當為0時,每個處理器上只運行一個線程了。如果當前CUP是雙核的,
那么只能 允許兩個線程同時執行,避免CPU線程之間的卻換帶來的性能影響。雖然是這么多,但一般是  CPU核心數量*2 比較合適。可以
充分利用CPU資源。
參考:
http://blog.csdn.net/piggyxp/article/details/6922277
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM