ICOP
???? 微軟在Winsock2中引入了IOCP這一概念 。IOCP全稱I/O Completion Port,中文譯為I/O完成端口。IOCP是一個(gè)異步I/O的API,它可以高效地將I/O事件通知給應(yīng)用程序。與使用select()或是其它異步方法不同的是,一個(gè)套接字[socket]與一個(gè)完成端口關(guān)聯(lián)了起來,然后就可繼續(xù)進(jìn)行正常的Winsock操作了。然而,當(dāng)一個(gè)事件發(fā)生的時(shí)候,此完成端口就將被操作系統(tǒng)加入一個(gè)隊(duì)列中。然后應(yīng)用程序可以對(duì)核心層進(jìn)行查詢以得到此完成端口。
????? 這里我要對(duì)上面的一些概念略作補(bǔ)充,在解釋[完成]兩字之前,我想先簡(jiǎn)單的提一下同步和異步這兩個(gè)概念,邏輯上來講做完一件事后再去做另一件事就是同步,而同時(shí)一起做兩件或兩件以上事的話就是異步了。你也可以拿單線程和多線程來作比喻。但是我們一定要將同步和堵塞,異步和非堵塞區(qū)分開來,所謂的堵塞函數(shù)諸如accept(…),當(dāng)調(diào)用此函數(shù)后,此時(shí)線程將掛起,直到操作系統(tǒng)來通知它,”HEY兄弟,有人連進(jìn)來了”,那個(gè)掛起的線程將繼續(xù)進(jìn)行工作,也就符合”生產(chǎn)者-消費(fèi)者”模型。堵塞和同步看上去有兩分相似,但卻是完全不同的概念。
????? 大家都知道I/O設(shè)備是個(gè)相對(duì)慢速的設(shè)備,不論打印機(jī),調(diào)制解調(diào)器,甚至硬盤,與CPU相比都是奇慢無比的,坐下來等I/O的完成是一件不甚明智的事情,有時(shí)候數(shù)據(jù)的流動(dòng)率非常驚人,把數(shù)據(jù)從你的文件服務(wù)器中以Ethernet速度搬走,其速度可能高達(dá)每秒一百萬字節(jié),如果你嘗試從文件服務(wù)器中讀取100KB,在用戶的眼光來看幾乎是瞬間完成,但是,要知道,你的線程執(zhí)行這個(gè)命令,已經(jīng)浪費(fèi)了10個(gè)一百萬次CPU周期。所以說,我們一般使用另一個(gè)線程來進(jìn)行I/O。
????? 重疊IO[overlapped I/O]是Win32的一項(xiàng)技術(shù),你可以要求操作系統(tǒng)為你傳送數(shù)據(jù),并且在傳送完畢時(shí)通知你。這也就是[完成]的含義。這項(xiàng)技術(shù)使你的程序在I/O進(jìn)行過程中仍然能夠繼續(xù)處理事務(wù)。事實(shí)上,操作系統(tǒng)內(nèi)部正是以線程來完成overlapped I/O。你可以獲得線程所有利益,而不需要付出什么痛苦的代價(jià)。
?
?作 者: nonocast (如果沒有如果)
http://book.77169.org/data/web5506/20050228/20050228__2744064.html
?
?
?
重疊I/O模型 ? 是異步模型的一種, ? 它是通過事件來通知完成的. ? 和slect的查詢不同.???一般重疊I/O模型要通過多線程來做的,???因?yàn)槭录却瘮?shù)的限制(一次最多等待64個(gè)),所以重疊操作在SOCKET多時(shí)應(yīng)用比較麻煩了. ? 還是select比較簡(jiǎn)單方便. ? 而且select是標(biāo)準(zhǔn)的異步模型,它適用于所有的平臺(tái).??
?
http://topic.csdn.net/t/20060825/15/4975718.html
總結(jié)
- 上一篇: MATLAB GUI笔记(二):滑动条的
- 下一篇: MATLAB GUI笔记(七):弹出式菜