一、同步網絡模型:就是服務端同步阻塞等待客戶端的請求,而後繼續操做後續處理,缺點是性能低。
二、同步通信+多線程模型:服務端爲每一個客戶端分配線程,這個線程就負責這個客戶端,同步通信,同步處理這個客戶端的請求,
缺點就是當客戶端不少時,線程不少,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