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