完成埠IO模型

2021-09-09 03:00:03 字數 1355 閱讀 8841

iocp(io完成埠)是一種伸縮性的io模型,廣泛應用於各種型別的高效能伺服器,如apache等。

io完成埠,應用程式使用執行緒池處理非同步io請求的一種機制。

最初設計:

應用程式發出一些非同步io請求裝置驅動把這些工作專案排序到完成埠,在完成埠上等待執行緒池便可以處理這些完成io。

完成埠實際上是乙個windows io結構,可以接收多種物件的控制代碼。

1 建立完成埠物件

呼叫createiocompletionport函式建立乙個完成埠物件,winsock使用這個物件為任意數量的套接字控制代碼管理io請求

handle createiocompletionport(

handle filehandle, //關聯的套接字控制代碼

handle existingcompletionport,//建立完成埠的物件控制代碼

ulong_ptr completionkey,//指定乙個控制代碼唯一的資料

dword numberofconcurrentthreads

//同時執行執行緒數量

);

此函式作用:1 建立完成埠物件   2 將乙個或者多個控制代碼關聯到io完成埠物件

例子:

handle hcompletion = ::createiocompletionport(invalid_handle_value,0,0,0);

2 io伺服器執行緒和完成埠

關聯套接字之前,建立乙個或者多個工作執行緒,在完成埠上執行並處理投遞到完成埠上的io請求

3 完成埠和重疊io

在套接字上投遞重疊傳送和接收請求處理io。

io操作完成後,系統向完成埠物件傳送乙個完成通知封包。

io完成埠以 先進先出的方式排隊

bool getqueuedcompletionstatus(

handle completionport,

//完成埠物件控制代碼

lpdword lpnumberofbytes,//

取得io操作期間

pulong_ptr lpcompletionkey,

dword dwmilliseconds

);

完成埠模型

最近要做乙個網路方面的小東東,基於c s模式的。都說iocp可以使系統達到最佳的效能,因此我就比劃了兩下,獻醜了。抄書開始。從本質上說,完成埠模型要求建立乙個windows完成埠物件,該物件通過指定數量的執行緒,對重疊i o請求進行管理,以便為已經完成的重疊i o請求提供服務。首先要建立乙個i o完...

ACE 實現 完成埠 win32 I O模型

在win32平台上最有效率的io模型,莫過於完成埠了。csdn上到處都是關於完成埠的問題。在ace中對win32平台的完成埠有著非常好的封裝。ace中前攝式框架的win32實現就是使用的完成埠。我們先來看看這個框架有哪些組成部分。ace proactor 前攝器,真怪異的名字。叫非同步事件分配者多好...

I O 完成埠實現

這篇文章是繼承上篇 windows 同步裝置 i o 與非同步裝置 i o 未讀過的讀者可以去看看再來看這篇文章哈。建立新的i o完成埠 i o完成可能是最複雜的windows核心物件了,為了建立乙個i o完成端 們需要呼叫createiocompletionport函式 handle winapi...