iocp (i/o completion port,i/o 完成埠 ) 是 windows 非同步通訊機制
完成埠大概的處理流程:
1:建立乙個完成埠。
2:建立乙個執行緒a。
3:a執行緒迴圈呼叫getqueuedcompletionstatus()函式來得到io操作結果,這個函式是個阻塞函式。
4:主線程迴圈裡呼叫accept等待客戶端連線上來。
5:主線程裡accept返回新連線建立以後,把這個新的套接字控制代碼用createiocompletionport關聯到完成埠,然後發出乙個非同步的wsasend或者wsarecv呼叫,
因為是非同步函式,wsasend/wsarecv會馬上返回,實際的傳送或者接收資料的操作由windows系統去做。
7:windows系統完成wsasend或者wsarecv的操作,把結果發到完成埠。
8:a執行緒裡的getqueuedcompletionstatus()馬上返回,並從完成埠取得剛完成的wsasend/wsarecv的結果。
9:在a執行緒裡對這些資料進行處理(如果處理過程很耗時,需要新開執行緒處理),然後接著發出wsasend/wsarecv,並繼續下一次迴圈阻塞在getqueuedcompletionstatus()這裡。
歸根到底概括完成埠模型一句話:
我們不停地發出非同步的wsasend/wsarecv io操作,具體的io處理過程由windows系統完成,windows系統完成實際的io處理後,把結果送到完成埠上(如果有多個io都完成了,那麼就在完成埠那裡排成乙個佇列)。我們在另外乙個執行緒裡從完成埠不斷地取出io操作結果,然後根據需要再發出wsasend/wsarecv io操作。
實現非同步通訊
實現非同步通訊 1 定義 ajax的核心物件xmlhttprequest xmlhttprequest 是瀏覽器的xmlhttp元件的物件,通過該物件ajax可以像桌面應用程式一樣同伺服器進行資料層面的互動,不需要每次都進行整個頁面的重新整理。2 步驟 1 初始化物件並傳送xmlhttpreques...
lettuce redis非同步通訊
今天簡單研究了下lettuce,lettuce主要利用netty實現與redis的同步和非同步通訊。redisconnectionconnection client.connect connection.set key key string value connection.get key redi...
同步非同步通訊
同步通訊 stm 同步傳輸的特點是可獲得較高的傳輸速度,但實現起來較複雜。同步傳輸是按資料幀進行傳送 字元與字元間的傳輸是同步無間隔的,收發方的時鐘必須嚴格一致。非同步通訊 atm 非同步傳輸方式 stm 是按字元乙個乙個地傳送,字元與字元間傳輸間隔是任意的,傳送方和接收方的時鐘要求沒有同步的嚴格。...