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

大龍的博客

常用鏈接

統(tǒng)計

最新評論

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

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

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

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

<!--[if !supportLists]-->基礎(chǔ)介紹

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

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

  • 設(shè)備列表。

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

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

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

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

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

 

<!--[if !supportLists]-->相關(guān)概念

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

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

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

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

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

3  通過CreateIoCompletionPort將完成端口與某一設(shè)備相關(guān)聯(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來關(guān)聯(lián)完成端口與設(shè)備時,通過CompletionKey參數(shù)設(shè)定的。也就是說這個數(shù)據(jù)特定于設(shè)備(這里指套接字)。
    GetQueuedCompetionStatus
lpOverlapped參數(shù)則包含了“單I/O操作數(shù)據(jù)”,在通過該函數(shù)取得I/O完成隊列中的I/O請求完成項后,lpOverlapped指向一個對應(yīng)了發(fā)起這個I/O請求時傳遞的OVERLAPPED數(shù)據(jù)結(jié)構(gòu),也就是說這個數(shù)據(jù)特定于I/O請求。
  單句柄數(shù)據(jù)和單I/O數(shù)據(jù)有什么用呢?同過單句柄數(shù)據(jù)我們可以關(guān)聯(lián)特定的處理函數(shù)或處理器或其它結(jié)構(gòu)對該句柄之上的I/O進行特定的處理。單I/O數(shù)據(jù)為異步I/O的發(fā)起和完成建立了聯(lián)系,它可以關(guā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]-->資源管理問題一

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

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

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

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

<!--[if !supportLists]-->關(guān)于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: 完成端口使用總結(jié) (轉(zhuǎn)) 2008-07-05 08:26 企業(yè)即時通訊

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

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

寫的很詳細(xì)的。  回復(fù)  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            欧美一级理论片| 久久久久国产免费免费| 欧美丰满高潮xxxx喷水动漫| 久久精品亚洲| 亚洲第一在线综合网站| 欧美黄在线观看| 欧美精品色综合| 亚洲一区网站| 性欧美激情精品| 亚洲国产另类久久久精品极度| 美女精品国产| 欧美日本国产精品| 欧美一区二区三区久久精品茉莉花| 午夜精品一区二区三区电影天堂| 韩日精品视频| 亚洲欧洲在线视频| 国产精品一区二区欧美| 久热精品视频在线观看一区| 蜜桃精品一区二区三区| 中文在线一区| 久久精品国产一区二区电影| 亚洲精品乱码久久久久久蜜桃91| 一本色道88久久加勒比精品 | 亚洲欧美日韩直播| 伊人成人在线| 在线视频欧美精品| 韩国自拍一区| 中国av一区| 亚洲国产二区| 午夜影视日本亚洲欧洲精品| 亚洲精品少妇网址| 午夜视频在线观看一区| 亚洲美女毛片| 久久精品亚洲一区| 亚洲一区二区三区视频| 久久久人成影片一区二区三区| 一片黄亚洲嫩模| 久久亚洲春色中文字幕| 欧美一区二区三区另类| 欧美理论在线| 欧美成人免费全部观看天天性色| 国产精品私人影院| 亚洲看片网站| 亚洲激情在线激情| 久久精品色图| 久久精品人人做人人爽电影蜜月| 欧美日韩精品欧美日韩精品 | 久久久久久久综合日本| 欧美视频一区二区三区…| 欧美成人tv| 尤物在线精品| 亚洲已满18点击进入久久| 在线中文字幕不卡| 欧美精品 日韩| 亚洲第一页在线| 在线免费一区三区| 久久久久国产精品一区| 欧美在线免费| 国产欧美日本| 午夜久久福利| 久久精品国语| 国户精品久久久久久久久久久不卡| 亚洲色图制服丝袜| 亚洲一区二区三区精品动漫| 欧美日韩精品一区二区三区四区| 亚洲黄色影片| 99热这里只有成人精品国产| 欧美国产亚洲视频| 欧美日本久久| 欧美在线国产精品| 欧美电影免费观看高清| 久久精选视频| 欧美成人午夜激情| 91久久精品国产| 一区二区三区视频在线播放| 国产精品99久久久久久人| 欧美在线观看视频在线| 欧美日韩在线大尺度| 美女主播一区| 亚洲小说春色综合另类电影| 亚洲人成在线播放网站岛国| 亚洲成人影音| 米奇777超碰欧美日韩亚洲| 一区二区精品在线观看| 欧美三区不卡| 亚洲一区二区免费在线| 久久久精品国产一区二区三区 | 亚洲观看高清完整版在线观看| 亚洲国产另类 国产精品国产免费| 老司机凹凸av亚洲导航| 亚洲电影天堂av| 亚洲四色影视在线观看| 国产热re99久久6国产精品| 久久婷婷久久一区二区三区| 亚洲第一页在线| 亚洲欧美成人一区二区三区| 国产日韩欧美精品在线| 蜜乳av另类精品一区二区| 99国产精品视频免费观看| 亚洲网站在线播放| 国产精一区二区三区| 另类天堂av| 亚洲欧美不卡| 亚洲精品国产视频| 久久av一区二区三区| 亚洲国内欧美| 免费欧美日韩| 亚洲图片欧美一区| 亚洲国产精品欧美一二99| 国产精品啊啊啊| 欧美大片在线观看| 久久久精品国产免大香伊| 午夜精品在线| 国产精品日韩电影| 免费在线国产精品| 午夜视频久久久久久| 亚洲精选大片| 欧美成人综合在线| 久久九九久久九九| 亚洲一区二区日本| 亚洲精品欧美在线| 伊甸园精品99久久久久久| 国产精品入口福利| 欧美剧在线免费观看网站| 久久久精品国产99久久精品芒果| 亚洲深夜av| 99国内精品久久| 亚洲三级免费| 欧美激情第9页| 美女久久一区| 久久久久久久综合色一本| 午夜国产精品视频免费体验区| 亚洲精品欧美激情| 亚洲经典在线看| 亚洲福利视频专区| 精久久久久久| 怡红院av一区二区三区| 国产亚洲亚洲| 国产综合色一区二区三区| 一区二区三区精密机械公司 | 亚洲精品美女在线观看播放| 久久偷看各类wc女厕嘘嘘偷窃| 性18欧美另类| 欧美一进一出视频| 亚洲欧美日韩成人| 亚洲欧美国产日韩天堂区| 亚洲一区二区三区乱码aⅴ| 亚洲色图综合久久| 亚洲性图久久| 欧美亚洲日本网站| 久久精品视频va| 久久久女女女女999久久| 久久日韩精品| 欧美sm视频| 亚洲人成免费| 一区二区三区你懂的| 亚洲一区二区精品| 欧美在线播放一区二区| 久久蜜臀精品av| 欧美电影免费观看网站| 欧美日韩国产综合在线| 欧美系列一区| 国产自产在线视频一区| 在线观看中文字幕亚洲| 亚洲精品一区二区三区婷婷月 | 欧美与黑人午夜性猛交久久久| 午夜日韩电影| 美女网站久久| 日韩视频一区二区三区在线播放免费观看 | 国内一区二区三区| 亚洲精品日产精品乱码不卡| 亚洲视屏一区| 久久视频一区| 亚洲激情综合| 亚洲自拍高清| 欧美 日韩 国产在线| 欧美四级在线观看| 国产亚洲一区二区在线观看| 最新国产成人av网站网址麻豆| 亚洲午夜av在线| 榴莲视频成人在线观看| 一本一本久久a久久精品综合妖精| 欧美一区观看| 欧美精品三级| 一区二区在线视频观看| 亚洲视频在线观看视频| 美女被久久久| 亚洲免费网站| 欧美日韩伦理在线| 激情小说另类小说亚洲欧美| 这里是久久伊人| 欧美高清日韩| 久久高清免费观看| 欧美亚洲成人网| 亚洲美女一区| 欧美第十八页| 欧美在线视频日韩| 国产精品欧美日韩一区| 亚洲免费观看高清在线观看 | 亚洲一级黄色|