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

loop_in_codes

低調(diào)做技術(shù)__歡迎移步我的獨(dú)立博客 codemaro.com 微博 kevinlynx

IOCP與線程

author : Kevin Lynx

 

什么是完成包?

完成包,即IO Completion Packet,是指異步IO操作完畢后OS提交給應(yīng)用層的通知包。IOCP維護(hù)了一個(gè)IO操作結(jié)果隊(duì)列,里面
保存著各種完成包。應(yīng)用層調(diào)用GQCS(也就是GetQueueCompletionStatus)函數(shù)獲取這些完成包。

最大并發(fā)線程數(shù)

在一個(gè)典型的IOCP程序里,會(huì)有一些線程調(diào)用GQCS去獲取IO操作結(jié)果。最大并發(fā)線程數(shù)指定在同一時(shí)刻處理完成包的線程數(shù)目。
該參數(shù)在調(diào)用CreateIoCompletionPort時(shí)由NumberOfConcurrentThreads指定。

工作者線程

工作者線程一般指的就是調(diào)用GQCS函數(shù)的線程。要注意的是,工作者線程數(shù)和最大并發(fā)線程數(shù)并不是同一回事(見下文)。工作者
線程由應(yīng)用層顯示創(chuàng)建(_beginthreadex 之類)。工作者線程通常是一個(gè)循環(huán),會(huì)不斷地GQCS到完成包,然后處理完成包。

調(diào)度過程

工作者線程以是否阻塞分為兩種狀態(tài):運(yùn)行狀態(tài)和等待狀態(tài)。當(dāng)線程做一些阻塞操作時(shí)(線程同步,甚至GQCS空的完成隊(duì)列),線程
處于等待狀態(tài);否則,線程處于運(yùn)行狀態(tài)。

另一方面,OS會(huì)始終保持某一時(shí)刻處于運(yùn)行狀態(tài)的線程數(shù)小于最大并發(fā)線程數(shù)。每一個(gè)調(diào)用GQCS函數(shù)的線程OS實(shí)際上都會(huì)進(jìn)行記錄,
當(dāng)完成隊(duì)列里有完成包時(shí),OS會(huì)首先檢查當(dāng)前處于運(yùn)行狀態(tài)的工作線程數(shù)是否小于最大并發(fā)線程數(shù),如果小于,OS會(huì)按照LIFO的順
序讓某個(gè)工作者線程從GQCS返回(此工作者線程轉(zhuǎn)換為運(yùn)行狀態(tài))。如何決定這個(gè)LIFO?這是簡單地通過調(diào)用GQCS函數(shù)的順序決定的。

從這里可以看出,這里涉及到線程喚醒和睡眠的操作。如果兩個(gè)線程被放置于同一個(gè)CPU上,就會(huì)有線程切換的開銷。因此,為了消
除這個(gè)開銷,最大并發(fā)線程數(shù)被建議為設(shè)置成CPU數(shù)量。

從以上調(diào)度過程還可以看出,如果某個(gè)處于運(yùn)行狀態(tài)的工作者線程在處理完成包時(shí)阻塞了(例如線程同步、其他IO操作),那么就有
CPU資源處于空閑狀態(tài)。因此,我們也看到很多文檔里建議,工作者線程數(shù)為(CPU數(shù)*2+2)。

在一個(gè)等待線程轉(zhuǎn)換到運(yùn)行狀態(tài)時(shí),有可能會(huì)出現(xiàn)短暫的時(shí)間運(yùn)行線程數(shù)超過最大并發(fā)線程數(shù),這個(gè)時(shí)候OS會(huì)迅速地讓這個(gè)新轉(zhuǎn)換
的線程阻塞,從而減少這個(gè)數(shù)量。(關(guān)于這個(gè)觀點(diǎn),MSDN上只說:by not allowing any new active threads,卻沒說明not allowing
what)

調(diào)度原理

這個(gè)知道了其實(shí)沒什么意義,都是內(nèi)核做的事,大致上都是操作線程control block,直接摘錄<Inside IO Completion Ports>:

The list of threads hangs off the queue object. A thread's control block data structure has a pointer in it that
references the queue object of a queue that it is associated with; if the pointer is NULL then the thread is not
associated with a queue.

So how does NT keep track of threads that become inactive because they block on something other than the completion
port" The answer lies in the queue pointer in a thread's control block. The scheduler routines that are executed
in response to a thread blocking (KeWaitForSingleObject, KeDelayExecutionThread, etc.) check the thread's queue
pointer and if its not NULL they will call KiActivateWaiterQueue, a queue-related function. KiActivateWaiterQueue
decrements the count of active threads associated with the queue, and if the result is less than the maximum and
there is at least one completion packet in the queue then the thread at the front of the queue's thread list is
woken and given the oldest packet. Conversely, whenever a thread that is associated with a queue wakes up after
blocking the scheduler executes the function KiUnwaitThread, which increments the queue's active count.

參考資料

<Inside I/O Completion Ports>:
http://technet.microsoft.com/en-us/sysinternals/bb963891.aspx
<I/O Completion Ports>:
http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx
<INFO: Design Issues When Using IOCP in a Winsock Server>:
http://support.microsoft.com/kb/192800/en-us/

posted on 2008-06-23 17:32 Kevin Lynx 閱讀(4868) 評(píng)論(3)  編輯 收藏 引用 所屬分類: network

評(píng)論

# re: IOCP與線程 2008-06-23 23:45 飯中淹

@Kevin Lynx
寫iocp應(yīng)用的時(shí)候,我覺得最好能夠?qū)崿F(xiàn)工作線程就地組包,然后在組包之后,在工作線程內(nèi)就地處理,這樣是對(duì)iocp和cpu資源的最佳化利用。

還有,多謝你的幫助,我才糾正了對(duì)iocp的錯(cuò)誤理解。

  回復(fù)  更多評(píng)論   

# re: IOCP與線程 2010-06-04 11:02 我是豬

@飯中淹
錯(cuò)了 這樣會(huì)浪費(fèi)效能  回復(fù)  更多評(píng)論   

# re: IOCP與線程 2010-06-29 09:55 zhengxf

你好,我也認(rèn)為寫iocp應(yīng)用的時(shí)候, 應(yīng)該工作線程就地組包,然后在組包之后,在工作線程內(nèi)就地處理, 不知道"飯中淹" 老兄有何高見,能分享一下嗎.
  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品福利片| 久久成人精品一区二区三区| 欧美亚洲在线播放| 一二美女精品欧洲| 毛片av中文字幕一区二区| 欧美一区三区二区在线观看| 欧美激情一区| 欧美国产日韩一区二区在线观看| 国产日韩欧美一区| 亚洲性图久久| 亚洲欧美日韩中文视频| 欧美日韩国产二区| 亚洲欧洲精品一区二区三区 | 亚洲午夜精品福利| 亚洲看片网站| 欧美国产日韩一区| 亚洲高清视频一区二区| 亚洲高清视频一区| 久久阴道视频| 免费观看在线综合| 一区国产精品| 噜噜噜久久亚洲精品国产品小说| 久久夜色精品一区| 黄色成人在线网址| 久久国产精品久久久| 久久国产夜色精品鲁鲁99| 国产情侣一区| 久久狠狠亚洲综合| 久久在线播放| 亚洲激情成人网| 欧美激情片在线观看| 日韩午夜黄色| 午夜欧美精品| 国产尤物精品| 麻豆成人在线观看| 亚洲精品午夜| 欧美伊人久久久久久久久影院| 国产精品永久在线| 久久久久九九视频| 亚洲第一精品在线| 亚洲天天影视| 国产一区二区三区精品欧美日韩一区二区三区 | 性做久久久久久久免费看| 久久精品久久综合| 亚洲国产成人精品久久| 欧美精品一区在线发布| 在线亚洲欧美视频| 久久亚洲不卡| 99v久久综合狠狠综合久久| 国产精品久久久久国产a级| 欧美一区二区高清| 亚洲高清激情| 欧美在线免费观看视频| ●精品国产综合乱码久久久久| 欧美黄色小视频| 亚洲欧美一区二区原创| 欧美国产日本在线| 午夜精品久久久久久久99水蜜桃| 国产综合久久久久久鬼色| 欧美精品激情blacked18| 亚洲性人人天天夜夜摸| 欧美国产精品专区| 午夜精品剧场| 亚洲激情在线激情| 国产欧美日韩中文字幕在线| 免费观看一级特黄欧美大片| aa亚洲婷婷| 欧美www视频| 欧美一级淫片aaaaaaa视频| 在线国产精品播放| 国产精品乱码妇女bbbb| 欧美成人激情视频| 久久精品国产一区二区三区免费看 | 在线天堂一区av电影| 老司机一区二区三区| 亚洲欧美成人网| 亚洲精品一区在线观看| 好吊色欧美一区二区三区视频| 欧美三级日韩三级国产三级 | 欧美在线亚洲| 亚洲午夜一区二区| 亚洲黄色av| 女主播福利一区| 久久九九久久九九| 性欧美xxxx大乳国产app| 日韩视频在线你懂得| 亚洲电影有码| 精品成人一区二区三区四区| 国产乱码精品一区二区三区av| 欧美日韩一区精品| 欧美精品久久一区二区| 免费成人高清视频| 巨胸喷奶水www久久久免费动漫| 午夜精品久久久| 亚洲永久精品大片| 一本久久综合亚洲鲁鲁五月天| 亚洲国产人成综合网站| 欧美激情一区二区三区不卡| 麻豆精品网站| 欧美成人精品在线观看| 狼人天天伊人久久| 久久久亚洲精品一区二区三区| 久久不射网站| 久久精品男女| 久久免费99精品久久久久久| 久久精品99国产精品| 久久精品国产精品亚洲| 久久国产精品高清| 久久精品国产免费看久久精品| 欧美一区二区在线免费播放| 欧美一区高清| 久久亚洲二区| 欧美激情久久久| 亚洲国产欧美在线人成| 亚洲国产日韩精品| 日韩午夜激情| 亚洲一区二区三区涩| 性久久久久久久久| 久久嫩草精品久久久精品| 久久婷婷蜜乳一本欲蜜臀| 欧美刺激性大交免费视频| 欧美精品一区二区三区四区| 欧美视频免费在线| 国产日韩精品在线播放| 激情综合亚洲| 亚洲精一区二区三区| 亚洲午夜在线观看视频在线| 性18欧美另类| 免费观看亚洲视频大全| 亚洲激情欧美| 亚洲欧美综合精品久久成人| 久久久另类综合| 欧美激情亚洲精品| 国产精品婷婷| 最新成人av网站| 亚洲欧美国产毛片在线| 老司机午夜精品| 亚洲剧情一区二区| 欧美中日韩免费视频| 欧美激情区在线播放| 国产精品亚洲产品| 亚洲品质自拍| 久久精品国产v日韩v亚洲 | 国产亚洲精品一区二555| 精品白丝av| 亚洲一区区二区| 牛牛精品成人免费视频| 亚洲午夜精品在线| 蜜月aⅴ免费一区二区三区| 欧美特黄视频| 亚洲激情欧美| 久久精品成人| 日韩一级网站| 免费一级欧美片在线观看| 国产精品成人久久久久| 亚洲国产精品久久久久秋霞不卡| 亚洲免费影视| 亚洲国产精品激情在线观看| 午夜精品一区二区三区电影天堂 | 欧美一级网站| 欧美美女日韩| 在线观看日韩精品| 性欧美xxxx视频在线观看| 亚洲精品欧美一区二区三区| 久久精品中文字幕一区| 国产精品午夜春色av| 一本色道久久88精品综合| 久久婷婷国产综合国色天香| 亚洲无毛电影| 欧美日韩中文字幕日韩欧美| 亚洲精品乱码视频| 美女尤物久久精品| 午夜精品久久久久久久99黑人| 欧美三级电影网| 日韩一级黄色片| 亚洲成在线观看| 久久久九九九九| 国内外成人免费视频| 亚洲欧美制服中文字幕| 艳女tv在线观看国产一区| 男女av一区三区二区色多| 在线观看久久av| 老司机免费视频一区二区| 久久爱91午夜羞羞| 国产亚洲福利| 久久精品免视看| 久久成人羞羞网站| 好吊视频一区二区三区四区| 久久成人18免费网站| 亚欧成人在线| 国产一区在线播放| 久久久夜精品| 久久精品卡一| 在线看片成人| 亚洲高清激情| 欧美日韩亚洲一区在线观看| 亚洲一区二区高清视频| 亚洲一区二区三区精品动漫| 国产乱码精品| 久久综合九色99|