io完成端口,Io Completion Port,稱爲接口更合適,號稱是windows平臺上處理IO最快的模型,windows內部也是這樣處理的。
IO傳輸一般來說有阻塞、非阻塞、多線程阻塞、完成端口等多種模型,多線程阻塞是linux中常用的,windows中常用非阻塞即消息制,但是都有開銷大,處理高吞吐的時候心有餘而力不足的缺點。
一般來說,一臺機同時連接2000以上就要用到完成端口了,這是號稱windows上系統級處理能力最快的模型了。
原理比較簡單就是把多線程阻塞型稍加改變,本來是遇到連接就起線程,而現在先起一定數量的線程,再遇到連接的時候,線程可以直接處理,而無須干預。至少可以比多線程阻塞快一點。
寫起來倒也不復雜,用一個主線程先生成一定數量的線程,然後讓它們等着,主線程阻塞接受連接,然後綁定一下完成端口,原先的線程就自動開始處理了。在處理數據時使用Overlapped重疊模式,則可以提高性能。
代碼可以參見我的項目:www.kicoy.com。
有關完成端口的資料:http://blog.csdn.net/sodme/category/13790.aspx
http://www.allife.org/index.php?job=art&articleid=a_20051227_140933