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...