完成端口IO模型

IOCP(IO完成端口)是一種伸縮性的IO模型,普遍應用於各類類型的高性能服務器,如Apache等。服務器

IO完成端口,應用程序使用線程池處理異步IO請求的一種機制。app

最初設計:異步

  應用程序發出一些異步IO請求設備驅動把這些工做項目排序到完成端口,在完成端口上等待線程池即可以處理這些完成IO。函數

完成端口其實是一個WINDOWS IO結構,能夠接收多種對象的句柄。性能


                                   1 建立完成端口對象                              spa


調用CreateIoCompletionPort函數建立一個完成端口對象,winsock使用這個對象爲任意數量的套接字句柄管理IO請求線程

HANDLE CreateIoCompletionPort( HANDLE FileHandle, //關聯的套接字句柄 HANDLE ExistingCompletionPort,//建立完成端口的對象句柄 ULONG_PTR CompletionKey,//指定一個句柄惟一的數據 DWORD NumberOfConcurrentThreads//同時執行線程數量
    );

此函數做用:1 建立完成端口對象   2 將一個或者多個句柄關聯到IO完成端口對象設計

例子:code

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, LPOVERLAPPED* lpOverLapped, DWORD dwMilliseconds );
相關文章
相關標籤/搜索