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

大龍的博客

常用鏈接

統(tǒng)計

最新評論

完成端口使用總結 (轉(zhuǎn))

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

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

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

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

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

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

  • 設備列表。

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

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

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

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

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

 

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

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

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

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

1  通過CreateIoCompletionPort創(chuàng)建完成端口。

2  創(chuàng)建工作者線程。

3  通過CreateIoCompletionPort將完成端口與某一設備相關聯(lián)。

4  通過WSAXXX發(fā)出異步I/O請求。

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

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

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

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

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

  • 調(diào)用了closesocket
  • 調(diào)用了CancelIo
  • 發(fā)起I/O請求的線程終止
  • 超時
  • PostQueuedCompletionStatus
  • I/O請求正常完成

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

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

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

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

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

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

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


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

<!--[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 大龍 閱讀(8405) 評論(2)  編輯 收藏 引用

評論

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

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

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

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美www视频| 欧美成人午夜激情| 国产欧美日韩亚州综合| 在线一区二区三区四区| 亚洲精选国产| 国产精品videossex久久发布| 亚洲午夜国产成人av电影男同| 亚洲毛片av| 国产欧美一区二区三区国产幕精品| 亚洲影院一区| 欧美一区二区日韩| 亚洲大片av| 亚洲激情电影在线| 欧美精品在线一区二区| 亚洲成色精品| av成人免费观看| 91久久视频| 亚洲高清中文字幕| 欧美sm视频| 在线视频欧美精品| 一本色道久久加勒比88综合| 欧美日韩亚洲一区| 一区二区三区四区国产精品| 亚洲精品日韩一| 国产精品精品视频| 欧美在线视频二区| 久久亚洲精品中文字幕冲田杏梨| 亚洲国产三级网| 亚洲区在线播放| 欧美成人精品福利| 亚洲人成网站在线观看播放| 亚洲欧洲精品一区二区| 国产精品劲爆视频| 久热这里只精品99re8久| 久久婷婷综合激情| 亚洲天堂成人在线观看| 新67194成人永久网站| 1024国产精品| 国产精品99久久久久久白浆小说| 国产区亚洲区欧美区| 欧美激情va永久在线播放| 欧美人与禽性xxxxx杂性| 欧美在线观看一区二区| 麻豆91精品| 欧美一级黄色录像| 欧美岛国在线观看| 欧美在线一级va免费观看| 欧美一区日韩一区| 99精品99| 久久久久久噜噜噜久久久精品 | 久久综合久色欧美综合狠狠| 欧美不卡福利| 欧美在线国产| 欧美巨乳在线| 久久亚洲一区| 国产精品久线观看视频| 欧美搞黄网站| 国产亚洲欧美一区二区| 你懂的国产精品永久在线| 欧美88av| 久久久久久自在自线| 国产精品国产一区二区 | 国产亚洲欧美一区二区三区| 亚洲二区在线观看| 国内一区二区在线视频观看| 99天天综合性| 亚洲精品中文字幕有码专区| 欧美综合77777色婷婷| 亚洲女人天堂成人av在线| 欧美成人国产一区二区| 久久精品在线播放| 国产精品久久久久一区| 亚洲区一区二区三区| 亚洲高清二区| 亚洲欧美日本伦理| 亚洲欧美日韩精品久久奇米色影视| 噜噜噜在线观看免费视频日韩| 巨胸喷奶水www久久久免费动漫| 国产精品美女久久久| 一区二区三区免费网站| 亚洲午夜免费福利视频| 欧美激情一区二区三区全黄 | 国产一区二区三区在线观看免费| 亚洲激情网站| 9久re热视频在线精品| 久久精品99国产精品日本| 性欧美1819sex性高清| 欧美日韩第一区| 亚洲三级影院| 亚洲美女网站| 欧美性大战久久久久| 亚洲性xxxx| 久久国产天堂福利天堂| 国产自产2019最新不卡| 久久国产一区二区三区| 免播放器亚洲| 亚洲精品乱码久久久久久按摩观| 欧美 日韩 国产 一区| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲精品乱码久久久久| 欧美喷水视频| 亚洲影院在线观看| 久久久久国产一区二区三区| 精品av久久久久电影| 欧美成人三级在线| 99国产精品久久| 欧美怡红院视频一区二区三区| 国产日韩一区二区三区| 久久久国产91| 亚洲精品视频啊美女在线直播| 亚洲图片自拍偷拍| 国产日韩欧美二区| 欧美波霸影院| 亚洲欧美日韩国产中文| 久久一二三四| 一本色道久久加勒比88综合| 国产精品影音先锋| 久久婷婷丁香| 一区二区动漫| 欧美一进一出视频| **欧美日韩vr在线| 欧美精品免费观看二区| 亚洲欧洲99久久| 亚洲国产精品女人久久久| 亚洲自拍偷拍视频| 伊人成年综合电影网| 欧美日韩精品免费观看| 久久精品亚洲一区二区| 亚洲蜜桃精久久久久久久| 久久香蕉精品| 性做久久久久久久久| 亚洲黄色有码视频| 国产日韩av一区二区| 欧美成人免费在线| 久久动漫亚洲| 亚洲一区成人| 最新国产乱人伦偷精品免费网站| 久久成人国产精品| 亚洲一区bb| 亚洲激情网址| 极品尤物一区二区三区| 国产精品久久久久久久久久久久久 | 欧美激情久久久久久| 亚洲欧美日韩在线观看a三区| 亚洲国产专区校园欧美| 久久青青草原一区二区| 午夜伦理片一区| 亚洲系列中文字幕| 一区二区在线观看视频| 国产精品成人播放| 欧美激情网站在线观看| 欧美gay视频| 看欧美日韩国产| 欧美一区二区视频网站| 亚洲欧美日韩视频二区| 一区二区三区精品视频| 日韩一区二区精品葵司在线| 亚洲韩国精品一区| 亚洲电影免费在线| 亚洲高清不卡| 亚洲国产高清aⅴ视频| 欧美韩国日本综合| 欧美电影打屁股sp| 亚洲第一黄网| 欧美激情视频在线播放| 免播放器亚洲一区| 欧美激情中文字幕乱码免费| 美女精品自拍一二三四| 欧美成人资源网| 欧美激情偷拍| 亚洲伦理在线| 在线性视频日韩欧美| 中文亚洲字幕| 中文网丁香综合网| 亚洲视频一区二区在线观看| 亚洲国内在线| 一本色道久久精品| 亚洲欧美日本精品| 久久婷婷国产综合国色天香| 老牛影视一区二区三区| 欧美激情一区二区久久久| 欧美区二区三区| 国产精品福利在线| 国产有码一区二区| 亚洲经典在线| 亚洲一区图片| 久久久久久久精| 亚洲国产成人午夜在线一区| 日韩手机在线导航| 亚洲最新视频在线| 久久久国产精品一区二区三区| 麻豆久久婷婷| 国产精品国产三级国产专播精品人| 国产欧美一区二区白浆黑人| 一色屋精品视频在线看| 亚洲精品乱码| 欧美综合77777色婷婷| 欧美国内亚洲| 午夜精品久久久久久久99黑人| 香蕉成人久久|