回顧一下Unix的5種I/O模型


          1、阻塞I/O
          2、非阻塞I/O
          3、I/O復用(select、poll、linux 2.6種改進的epoll)
          4、信號驅動IO(SIGIO)
          5、異步I/O(POSIX的aio_系列函數)


          同步I/O和異步IO


          POSIX把這兩個術語定義如下:
          同步I/O操作導致請求進程阻塞,直至操作完成
          異步I/O操作不導致請求阻塞。

          根據上述定義,前四種I/O模型都是同步I/O,第5種才是異步I/O。

          select不允許多于一個的線程在同一個描述符集上等待。這使得反應式模型不適用于高性能應用,因為它沒有有效地利用硬件的并行性。
          異步I/O通常能夠提高更好的性能,windows的iocp通過內核線程調度,也能提供很好的并發性能,但不是真正的異步。


          Java nio和多路復用


          java 1.4 nio提供的select,這是一種多路復用I/O(multiplexed non-blocking I/O)模型,底層是使用select或者poll。I/O復用就是,阻塞在select或者poll系統調用的某一個之上,而不是阻塞在真正的I/O系統調用之上。JDK 5.0 update 9和JDK 6.0在linux下支持使用epoll,可以提高并發idle connection的性能(http://blogs.sun.com/alanb/entry/epoll)。

          以前看到有人猜測Windows下nio使用了IOCP,那應該是錯的,畢竟IOCP不是多路復用I/O模型。從JavaOne 2006的幻燈片來看,aio才會使用IOCP來實現的。


          Java aio和JSR 203


          2003年,就有了JSR 203(http://jcp.org/en/jsr/detail?id=203),但是一直沒有實現。

          終于,JSR 203的spec lead說,將會在Java SE 7.0中完成JSR 203,Java SE 6.0已經是RC,很快正式版就會發布,然后就是Java SE 7.0,估計我們不需要等太久了。
          http://blogs.sun.com/alanb/entry/what_is_happening_with_jsr


          asynchronous I/O對于Java的影響,將不會低于當年JDK 1.4 nio引入multiplexed non-blocking I/O的影響,很多的Java應用都會重寫。如同Linux 2.6支持AIO,DB2、Oracle數據庫都會發布新版本,說支持使用AIO,性能提高多少多少云云(主要是AIO的文件操作部分)。

          對asynchronous I/O的支持,Java程序就能夠支撐大并發網絡應用了,在IO模型方面,對于C/C++等語言不再存在“C/C++能做,但是Java不能做的事情”。

          這個是Java One 2006上的幻燈片。
          http://blogs.sun.com/roller/resources/alanb/bof0895.pdf
          提到了:
          需要新的channel types支持異步I/O模型
          使用Native機制,例如Windows IO Completion ports。
          posted on 2006-11-21 00:34 溫少的日志 閱讀(6883) 評論(2)  編輯  收藏
          Comments

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 六枝特区| 余庆县| 威信县| 城固县| 镇坪县| 瑞金市| 中西区| 双牌县| 枣强县| 华阴市| 台州市| 祁门县| 钟祥市| 宜君县| 乐山市| 平潭县| 亳州市| 通州区| 新巴尔虎左旗| 许昌市| 昌邑市| 兴城市| 昌江| 宁陵县| 商河县| 合水县| 凭祥市| 都昌县| 镇康县| 庆云县| 二手房| 长沙市| 特克斯县| 施甸县| 襄垣县| 长汀县| 岑巩县| 青龙| 临城县| 连城县| 偃师市|