青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

完成端口使用總結 (轉)

http://blog.csdn.net/dananhai/archive/2008/02/26/2122778.aspx

<!--[endif]-->前言

本文不是全面介紹完成端口的,只是簡單介紹了一下完成端口和幾個常用概念。本文主要關注完成端口關閉時資源釋放問題。

<!--[if !supportLists]-->基礎介紹

    完成端口——可能是Win32下最復雜的一種I/O模型,Win32下最復雜的內核對象。它通過指定數量的線程對重疊I/O請求進行管理,以便為已經完成的I/O請求提供服務,相對其它I/O模型,它管理任意數目I/O套接字。假若一個應用程序同時需要管理為數眾多的套接字,那么采用這種模型,往往可以達到最佳的系統性能。

通過CreateIoCompletionPort唯一一個創建內核對象而沒有LPSECURITY_ATTRIBUTES參數的Win32函數,這是因為完成端口只應用于進程內)來創建I/O完成端口,當你創建一個I/O完成端口時,內核實際創建了5個不同的數據結構。

  • 設備列表。

<!--[if !vml]--><!--[endif]-->
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

  • I/O完成隊列(FIFO)。當一個設備的異步I/O請求完成時,系統檢查該設備是否關聯了一個完成端口,如果是系統向該完成端口的I/O完成隊列加入完成I/O請求項。

<!--[if !vml]--><!--[endif]-->
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

  • 等待線程隊列(LIFO)。當線程池中的一個線程調用GetQueuedCompletionStatus時,調用線程的線程ID備放入該隊列中。
  • 釋放線程隊列(活動線程隊列)。完成端口通過該隊列監視和限定活動線程的數目,這個限定通常是CPU數目,過多的活動線程沒有實際意義,它會引發線程切換從而降低性能。
  • 暫停線程隊列。當線程調用了SleepWaitForSingleObjectWaitForMultipleObjects等。

<!--[if !vml]--><!--[endif]-->

 

<!--[if !supportLists]-->相關概念

<!--[if !supportLists]-->工作者線程與完成端口

成功創建一個完成端口后,便可開始將套接字句柄與對象關聯到一起。但在關聯套接字之前,首先必須創建一個或多個“工作者線程”,以便在I/O請求投遞給完成端口對象后,為完成端口提供服務。

完成端口I/O模型的工作流程如下:

1  通過CreateIoCompletionPort創建完成端口。

2  創建工作者線程。

3  通過CreateIoCompletionPort將完成端口與某一設備相關聯。

4  通過WSAXXX發出異步I/O請求。

5  在工作者線程中通過調用GetQueuedCompetionStatus取得完成I/O請求項進行后續的處理。

<!--[if !supportLists]--> <!--[endif]-->單句柄數據和單I/O操作數據

<!--[if !vml]--><!--[endif]-->HANDLE CreateIoCompletionPort(HANDLE FileHandle, HANDLE ExistingCompletionPort,
<!--[if !vml]--><!--[endif]-->   ULONG_PTR CompletionKey, DWORD NumberOfConcurrentThreads);
<!--[if !vml]--><!--[endif]-->BOOL GetQueuedCompletionStatus    (HANDLE CompletionPort, LPDWORD lpNumberOfBytesTransferred,
<!--[if !vml]--><!--[endif]-->    PULONG_PTR lpCompletionKey, LPOVERLAPPED *lpOverlapped, DWORD dwMilliseconds );<!--[if !vml]--><!--[endif]--> 

    GetQueuedCompetionStatuslpCompletionKey參數包含了“單句柄數據”,它是通過調用CreateIoCompletionPort來關聯完成端口與設備時,通過CompletionKey參數設定的。也就是說這個數據特定于設備(這里指套接字)。
    GetQueuedCompetionStatus
lpOverlapped參數則包含了“單I/O操作數據”,在通過該函數取得I/O完成隊列中的I/O請求完成項后,lpOverlapped指向一個對應了發起這個I/O請求時傳遞的OVERLAPPED數據結構,也就是說這個數據特定于I/O請求。
  單句柄數據和單I/O數據有什么用呢?同過單句柄數據我們可以關聯特定的處理函數或處理器或其它結構對該句柄之上的I/O進行特定的處理。單I/O數據為異步I/O的發起和完成建立了聯系,它可以關聯緩沖區或處理器(參見ACE_Proactor),方便異步I/O操作。

<!--[if !supportLists]-->需要注意的問題

下面是請求完成通知插入I/O完成隊列的幾種情況:

  • 調用了closesocket
  • 調用了CancelIo
  • 發起I/O請求的線程終止
  • 超時
  • PostQueuedCompletionStatus
  • I/O請求正常完成

上述情況除正常完成和PostQueuedCompletionStatus外,其他完成通知會使GetQueuedCompletionStatus返回FALSE,而此時lpOverlapped(超時為NULL)指向未完成I/O請求的I/O數據。明白了這些后,后面講的大多不是問題,講一講加深下印象吧。

<!--[if !supportLists]-->資源管理問題一

  • I/O請求返回非pending錯誤和GetQueuedCompletionStatus返回FALSE時如果釋放I/O數據占用的資源。(IOCP中的socket錯誤和資源釋放處理方法
  • 進行重疊I / O操作的同時,強行釋放一個OVERLAPPED結構。要想避免出現這種情況,最好的辦法是針對每個套接字句柄,調用closesocket函數,任何尚未進行的重疊I / O操作都會完成。

<!--[if !supportLists]-->資源管理問題二(關閉完成端口服務)

    我們通常通過調用PostQueuedCompletionStatusI/O完成隊列中加入特殊的完成項來結束工作者線程的,此時,對于未完成的I/O請求要分情況處理之:

  • 對于在工作者線程中發起的I/O請求(一般情況下是這樣),隨著該工作者線程的結束這些I/O請求便會完成,那么對于這種情況我們需要另外的線程來做相應的清理工作——通過調用超時參數為0GetQueuedCompletionStatus函數,遍歷I/O完成隊列,lpOverlapped包含了特定于I/O操作的數據。
  • 也可在收到關閉通知后,關閉套接字或取消相關的操作使得I/O請求完成并處理之。這需要將這些套接字以及相應的I/O操作記錄下來。

<!--[if !supportLists]-->關于PostQueuedCompletionStatus


由于等待線程隊列是LIFO的,所以該函數要想通知每個工作者線程是件棘手的事情。

<!--[if !supportLists]--><!--[endif]-->參考文獻

[1]Jeffery Richter.Advanced Windows(3rd Edition),Microsoft Press,1997
[2]Anthony Jones,Jim Ohlund. Network Programming for Microsoft Windows ,Microsoft Press,2002

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2122778


posted on 2008-03-05 17:07 大龍 閱讀(8390) 評論(2)  編輯 收藏 引用

評論

# re: 完成端口使用總結 (轉) 2008-07-05 08:26 企業即時通訊

Kmd教程7-后備列表
作者:松松翻譯·發布日期:2004-10-8·閱讀次數:7824  回復  更多評論   

# re: 完成端口使用總結 (轉) 2009-07-10 18:07 飛鴿傳書

寫的很詳細的。  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美亚洲一区| 亚洲激情校园春色| 久久这里有精品视频| 欧美与欧洲交xxxx免费观看| 欧美一区二区视频观看视频| 欧美一区二区三区四区在线 | 亚洲日本激情| 亚洲激情视频网站| av成人免费观看| 午夜欧美视频| 久久婷婷影院| 欧美理论在线播放| 国产农村妇女精品| 亚洲国产精品久久久久婷婷老年| 亚洲黄色在线看| 午夜精品在线观看| 欧美成人精品在线观看| 亚洲人www| 小黄鸭视频精品导航| 欧美a级片网| 国产免费成人av| 亚洲毛片av| 久久久免费av| 一区二区三区波多野结衣在线观看| 久久国产免费看| 欧美日韩在线播放三区| 国内精品久久久久国产盗摄免费观看完整版| 亚洲欧洲日本在线| 欧美综合国产精品久久丁香| 亚洲精品1234| 久久久国产精彩视频美女艺术照福利| 欧美精品免费观看二区| 激情婷婷久久| 午夜精品久久99蜜桃的功能介绍| 欧美激情亚洲激情| 久久久www成人免费毛片麻豆| 国产精品高清在线观看| 亚洲日本乱码在线观看| 老色批av在线精品| 亚洲直播在线一区| 欧美精品一区二区三区久久久竹菊 | 久久久久成人精品| 中日韩高清电影网| 美日韩精品免费| 亚洲欧美日韩在线一区| 欧美日韩一区成人| 99re66热这里只有精品3直播| 久久综合给合| 久久激情中文| 国语自产偷拍精品视频偷 | 亚洲精品一区二区三区av| 玖玖综合伊人| 在线观看亚洲精品| 美女视频黄 久久| 久久国产精品毛片| 国产一区二区无遮挡| 久久久久久色| 久久久精品国产99久久精品芒果| 国产一区二区三区日韩欧美| 久久福利毛片| 久久国产精品99精品国产| 黑人极品videos精品欧美裸| 久久亚洲电影| 免费久久99精品国产自| 亚洲人www| 日韩一二三区视频| 国产精品国产三级欧美二区| 午夜精品免费在线| 欧美亚洲综合在线| 亚洲福利专区| 亚洲美女免费精品视频在线观看| 欧美精品成人91久久久久久久| 日韩视频一区二区| 亚洲性感激情| 伊人激情综合| 亚洲精品亚洲人成人网| 国产精品你懂的| 噜噜爱69成人精品| 欧美日本高清视频| 久久精品99久久香蕉国产色戒| 久久久国产视频91| 一本一本久久a久久精品综合麻豆| 一本色道综合亚洲| 国内精品伊人久久久久av一坑| 亚洲第一中文字幕在线观看| 欧美日韩在线大尺度| 久久久精品五月天| 欧美日韩国产精品自在自线| 欧美在线影院在线视频| 欧美福利一区| 久久精品国产v日韩v亚洲| 你懂的成人av| 欧美在线观看日本一区| 欧美韩日视频| 久久一区二区视频| 国产精品video| 欧美成人精品激情在线观看| 国产精品麻豆成人av电影艾秋| 美女国产一区| 国产精品一区二区视频| 亚洲第一网站| 国内精品久久久久国产盗摄免费观看完整版 | 国产精品福利在线观看网址| 亚洲国产精品久久精品怡红院 | 麻豆成人小视频| 亚洲综合首页| 欧美激情aⅴ一区二区三区| 久久久久99精品国产片| 欧美日韩一区国产| 欧美国产高潮xxxx1819| 国产一区二区观看| 正在播放日韩| 在线亚洲观看| 欧美巨乳在线观看| 欧美福利视频| 在线欧美电影| 久久嫩草精品久久久久| 久久久久久国产精品mv| 国产精品视频免费在线观看| 日韩一区二区久久| 99视频一区二区| 欧美高清视频免费观看| 欧美 日韩 国产精品免费观看| 国产在线不卡| 欧美在线影院| 老妇喷水一区二区三区| 一区一区视频| 久久一区二区三区四区| 欧美成人一区二区在线| 影音先锋中文字幕一区| 久久精品99国产精品日本| 欧美在线观看视频在线| 国产欧美日韩三级| 久久不见久久见免费视频1| 久久久久久精| 亚洲国产裸拍裸体视频在线观看乱了| 久久综合九色99| 欧美高清不卡在线| 亚洲区中文字幕| 欧美日韩中文精品| 亚洲午夜激情免费视频| 欧美一区二区在线免费播放| 国产一区二区三区奇米久涩| 久久久久久一区二区三区| 欧美福利小视频| 一区二区三区视频在线| 国产精品久久久久毛片软件 | 亚洲国产视频直播| 夜夜嗨av一区二区三区中文字幕| 欧美日韩国产麻豆| 亚洲免费视频网站| 蜜桃精品久久久久久久免费影院| 亚洲国产精品黑人久久久| 欧美搞黄网站| 亚洲自拍另类| 欧美高清视频免费观看| 一二美女精品欧洲| 国产欧美一区二区三区沐欲| 久久看片网站| 夜夜夜久久久| 久久午夜电影| 亚洲网站在线播放| 狠狠色狠狠色综合系列| 欧美区亚洲区| 久久精品官网| 在线视频精品| 欧美福利视频在线| 国产亚洲人成a一在线v站| 久久久久在线观看| 日韩视频免费观看高清在线视频 | av成人免费在线| 久久久www| 亚洲精品一区二区三| 国产美女精品| 欧美激情影音先锋| 久久疯狂做爰流白浆xx| 日韩视频在线观看| 久久香蕉国产线看观看av| 一区二区三区久久久| 黄色免费成人| 国产精品劲爆视频| 欧美成人黑人xx视频免费观看| 亚洲视频在线播放| 亚洲盗摄视频| 久久免费精品日本久久中文字幕| 亚洲美女在线国产| 精品91久久久久| 国产精品视频精品| 欧美日韩一级片在线观看| 久久久久久久久久久久久女国产乱| 亚洲精品乱码久久久久久| 蜜桃久久精品乱码一区二区| 亚洲免费在线电影| 国产精品99久久久久久久久久久久 | 制服丝袜激情欧洲亚洲| 亚洲国产精品ⅴa在线观看| 久久久久久久激情视频| 西瓜成人精品人成网站| 亚洲午夜电影在线观看| 9色porny自拍视频一区二区|