unix的5种i/o模型
来源:互联网 发布:2015淘宝天猫客服手册 编辑:程序博客网 时间:2024/05/03 22:56
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和多路复用
java1.4 nio提供的select,这是一种多路复用I/O(multiplexed non-blockingI/O)模型,底层是使用select或者poll。I/O复用就是,阻塞在select或者poll系统调用的某一个之上,而不是阻塞在真正的I/O系统调用之上。JDK 5.0 update 9和JDK 6.0在linux下支持使用epoll,可以提高并发idleconnection的性能(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
asynchronousI/O对于Java的影响,将不会低于当年JDK 1.4 nio引入multiplexed non-blockingI/O的影响,很多的Java应用都会重写。如同Linux2.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。
[附]
JDK 6.0 nio支持epoll,对并发idle connection会有大幅度的性能提升,这就是很多网络服务器应用程序需要的。
Oneof the updates in build 59 of Mustang (JavaTM SE 6) is that the New I/OSelector implementation will use the epoll event notification facilitywhen running on the Linux 2.6 kernel.
JDK 5.0 update 9也支持:
Theepoll SelectorProvider will be included in 5.0 update 9. To enable itrequires setting the system propertyjava.nio.channels.spi.SelectorProvider to the valuesun.nio.ch.EPollSelectorProvider.
5种IO模型:
阻塞IO
非阻塞IO
多路复用
信号驱动IO
异步IO
- unix的5种i/o模型
- UNIX的5种I/O模型
- Unix下5种I/O模型
- Unix下5种I/O模型
- Unix的5种I/O模型和Java NIO
- Unix下分5种基本的I/O模型:
- Unix下5种基本的I/O模型
- Unix下分5种基本的I/O模型
- UNIX下的5种I/O模型(重温)
- Unix I/O模型
- Unix I/O 模型
- Unix网络编程中的的五种I/O模型
- Unix网络编程中的的五种I/O模型
- Unix下的五种I/O模型图
- Unix下的I/O模型
- 图解UNIX的I/O模型
- Unix/Linux下5种I/O模型
- unix的5种I/O
- 解决script方式挂马
- 关于Oracle 10g的schedule job
- ----------------检查约束-------------------
- NIOS II 问题集锦
- 简单的CORBA通信代码解析
- unix的5种i/o模型
- 进程通信
- 【李开复】从诚信谈起 (一)
- yesterday and today
- 有人问我,做人最重要的是什么
- LWUIT 1.3终于发布了!
- 网站保姆 0.0.2.091217 正式版
- 服务器内存冗余技术内存热备和镜像
- 我对C语言使用中的两个误解