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

一、同步網絡模型:就是服務端同步阻塞等待客戶端的請求,而後繼續操做後續處理,缺點是性能低。
二、同步通信+多線程模型:服務端爲每一個客戶端分配線程,這個線程就負責這個客戶端,同步通信,同步處理這個客戶端的請求,
   缺點就是當客戶端不少時,線程不少,CPU在卻換線程的上下文時會消耗不少資源,最終會致使CPU只用於處理上下文的卻換而
   沒法正常處理線程後續的流程操做
三、完成端口,是微軟提供的高性能網絡處理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
相關文章
相關標籤/搜索