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。
[附]
JDK 6.0 nio支持epoll,对并发idle connection会有大幅度的性能提升,这就是很多网络服务器应用程序需要的。
One
of the updates in build 59 of Mustang (JavaTM SE 6) is that the New I/O
Selector implementation will use the epoll event notification facility
when running on the Linux 2.6 kernel.
JDK 5.0 update 9也支持:
The
epoll SelectorProvider will be included in 5.0 update 9. To enable it
requires setting the system property
java.nio.channels.spi.SelectorProvider to the value
sun.nio.ch.EPollSelectorProvider.
5种IO模型:
阻塞IO
非阻塞IO
多路复用
信号驱动IO
异步IO
最好性能的还是异步IO,目前Java只能支持到多路复用一级,期待着以后Java 7.0/8.0支持异步IO,6.0是没有希望了。
分享到:
相关推荐
本文主要总结了Unix下的I/O模型及其相关系统调用。 在Unix中,每个进程都有一个打开文件描述符表,用于存储指向文件inode的指针和元数据。文件描述符是非负整数,通常一个进程最多可以打开1024个文件,-1表示非法值...
Unix系统提供了多种I/O模型,如阻塞I/O、非阻塞I/O、I/O多路复用(如select、poll、epoll)、信号驱动I/O以及异步I/O。I/O聚集通常指的是在一个系统调用中处理多个文件描述符,而I/O分离则是在不同时间或通过不同...
`select` I/O模型是一种在多路复用I/O中广泛使用的机制,它允许一个进程监控多个文件描述符(如套接字)的状态,以确定何时进行读写操作。在本篇中,我们将深入探讨`select` I/O模型在客户端应用中的运用,以及与...
Unix提供了五种常见的I/O模型: 1. **阻塞I/O**:在数据准备好之前,进程被挂起,直到数据准备好并被拷贝到用户空间。 2. **非阻塞I/O**:请求不会阻塞,但用户线程需要不断轮询检查数据是否准备好。 3. **I/O多路...
根据UNIX网络编程的分类,Linux提供了五种I/O模型,分别是阻塞I/O、非阻塞I/O、I/O复用模型、信号驱动I/O以及异步I/O。 1. **阻塞I/O模型**: 在这个模型中,进程调用如`recvfrom`这样的系统调用时,会一直等待...
Windows操作系统提供了五种I/O模型:选择模型(Select)、异步选择模型(WSAAsyncSelect)、事件选择模型(WSAEventSelect)、重叠I/O模型(Overlapped I/O)和完成端口模型(Completion Port)。每一种模型都适用于...
1. **UNIX网络I/O模型** - **阻塞I/O**:在阻塞模式下,当socket执行I/O操作时,如果数据未准备好,进程或线程会暂停执行,直到数据可用。这种模型简单易用,但不适用于处理大量并发连接,因为一个线程必须等待...
5. **多路复用I/O模型(Select/Poll/Epoll Model)** 多路复用I/O模型是通过select、poll或epoll(Linux特有)等函数监控多个socket的状态。这些函数可以同时等待多个socket的就绪状态,当某个socket准备好读写时,...
史蒂文斯在《UNIX网络编程》中介绍了五种基本的I/O模型:阻塞I/O、非阻塞I/O、I/O多路复用(如select和poll)、信号驱动的I/O(SIGIO)以及异步I/O(POSIX的aio_functions)。阻塞I/O是最基础的模型,当调用I/O操作...
首先,UNIX的I/O模型基于文件的概念,一切皆文件,包括硬件设备。这种抽象使得对I/O操作的处理变得统一且高效。文件描述符是UNIX系统中进行I/O操作的核心,它是一个非负整数,代表了一个打开的文件或者设备。每个...
- **Unix/Linux I/O模型**: - **阻塞I/O**:传统模型。 - **非阻塞I/O**:提高响应能力。 - **I/O复用**:如`select`和`poll`。 - **信号驱动I/O**:基于信号通知。 - **异步I/O**:如使用`aio_`系列函数。 #...
在UNIX系统中,存在五种基本的I/O模型: 1. **阻塞I/O模型**:这是最常见的I/O模型,默认情况下所有的套接字都是阻塞的。当进程调用`recvfrom`等系统函数时,如果数据未准备好,进程会阻塞等待,直到数据就绪并被...
在Unix中,I/O模型主要分为同步和异步两种。同步I/O意味着调用I/O函数后,进程会阻塞直到操作完成;而异步I/O则允许进程在等待I/O操作完成期间继续执行其他任务。Unix提供了标准的I/O库,如stdio.h中的printf和scanf...
I/O模型通常分为几种类型,包括同步I/O、异步I/O、阻塞I/O和非阻塞I/O。在Unix中,这些模型可以通过不同的I/O函数来实现。例如,阻塞I/O会暂停执行直到数据准备好;非阻塞I/O则不会等待,而是立即返回一个状态,让...
4. **减少外围设备所需的驱动程序数量**:由于I2O技术提供了一种统一的I/O处理模型,对于支持I2O的设备,只需要较少的驱动程序即可,降低了维护和管理的复杂性。 I2O技术不仅适用于服务器,还可以应用于工作站和...
为了克服这些问题,UNIX系统提供了五种I/O模型: 1. 阻塞I/O模型:系统调用如recvfrom会在数据准备好或出现错误时返回,期间进程会被阻塞。 2. 非阻塞I/O模型:当没有数据时,recvfrom会立即返回错误,需要轮询检查...
在I/O模型中,有几种常见的处理方式: - 阻塞I/O:当一个进程尝试读取或写入I/O设备时,如果设备没有准备好,进程会被挂起,直到I/O操作完成。 - 非阻塞I/O:在这种模式下,进程不会被挂起,而是立即返回一个状态...
3. **异步I/O (Asynchronous I/O)**:与前面两种模型相比,异步I/O模型更进一步,它允许程序在发起I/O操作后立即返回,而由操作系统在后台完成实际的数据传输。当操作完成时,程序会收到通知。异步I/O模型在高并发...