`
julyboxer
  • 浏览: 220931 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Unix的5种I/O模型

    博客分类:
  • java
阅读更多

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下的I/O模型及其相关系统调用。 在Unix中,每个进程都有一个打开文件描述符表,用于存储指向文件inode的指针和元数据。文件描述符是非负整数,通常一个进程最多可以打开1024个文件,-1表示非法值...

    unix平台下I/O聚集和分离的一种方案

    Unix系统提供了多种I/O模型,如阻塞I/O、非阻塞I/O、I/O多路复用(如select、poll、epoll)、信号驱动I/O以及异步I/O。I/O聚集通常指的是在一个系统调用中处理多个文件描述符,而I/O分离则是在不同时间或通过不同...

    select I/O模型 客户端

    `select` I/O模型是一种在多路复用I/O中广泛使用的机制,它允许一个进程监控多个文件描述符(如套接字)的状态,以确定何时进行读写操作。在本篇中,我们将深入探讨`select` I/O模型在客户端应用中的运用,以及与...

    探索Java I/O 模型的演进

    Unix提供了五种常见的I/O模型: 1. **阻塞I/O**:在数据准备好之前,进程被挂起,直到数据准备好并被拷贝到用户空间。 2. **非阻塞I/O**:请求不会阻塞,但用户线程需要不断轮询检查数据是否准备好。 3. **I/O多路...

    浅谈Linux 网络 I/O 模型简介(图文)

    根据UNIX网络编程的分类,Linux提供了五种I/O模型,分别是阻塞I/O、非阻塞I/O、I/O复用模型、信号驱动I/O以及异步I/O。 1. **阻塞I/O模型**: 在这个模型中,进程调用如`recvfrom`这样的系统调用时,会一直等待...

    ws Socket五种IO模型代码

    Windows操作系统提供了五种I/O模型:选择模型(Select)、异步选择模型(WSAAsyncSelect)、事件选择模型(WSAEventSelect)、重叠I/O模型(Overlapped I/O)和完成端口模型(Completion Port)。每一种模型都适用于...

    网络编程模型综述.doc

    1. **UNIX网络I/O模型** - **阻塞I/O**:在阻塞模式下,当socket执行I/O操作时,如果数据未准备好,进程或线程会暂停执行,直到数据可用。这种模型简单易用,但不适用于处理大量并发连接,因为一个线程必须等待...

    WinSOCKET五种模型_VS2015

    5. **多路复用I/O模型(Select/Poll/Epoll Model)** 多路复用I/O模型是通过select、poll或epoll(Linux特有)等函数监控多个socket的状态。这些函数可以同时等待多个socket的就绪状态,当某个socket准备好读写时,...

    78程序员练级攻略(2018):异步IO模型和lock-Free编程1

    史蒂文斯在《UNIX网络编程》中介绍了五种基本的I/O模型:阻塞I/O、非阻塞I/O、I/O多路复用(如select和poll)、信号驱动的I/O(SIGIO)以及异步I/O(POSIX的aio_functions)。阻塞I/O是最基础的模型,当调用I/O操作...

    UNIX-IO.rar_unix IO

    首先,UNIX的I/O模型基于文件的概念,一切皆文件,包括硬件设备。这种抽象使得对I/O操作的处理变得统一且高效。文件描述符是UNIX系统中进行I/O操作的核心,它是一个非负整数,代表了一个打开的文件或者设备。每个...

    IO模型与性能分析

    - **Unix/Linux I/O模型**: - **阻塞I/O**:传统模型。 - **非阻塞I/O**:提高响应能力。 - **I/O复用**:如`select`和`poll`。 - **信号驱动I/O**:基于信号通知。 - **异步I/O**:如使用`aio_`系列函数。 #...

    第四讲 I-O复用与套接口选项.ppt

    在UNIX系统中,存在五种基本的I/O模型: 1. **阻塞I/O模型**:这是最常见的I/O模型,默认情况下所有的套接字都是阻塞的。当进程调用`recvfrom`等系统函数时,如果数据未准备好,进程会阻塞等待,直到数据就绪并被...

    Unix环境高级编程11-20章

    在Unix中,I/O模型主要分为同步和异步两种。同步I/O意味着调用I/O函数后,进程会阻塞直到操作完成;而异步I/O则允许进程在等待I/O操作完成期间继续执行其他任务。Unix提供了标准的I/O库,如stdio.h中的printf和scanf...

    第5章 输入输出1

    I/O模型通常分为几种类型,包括同步I/O、异步I/O、阻塞I/O和非阻塞I/O。在Unix中,这些模型可以通过不同的I/O函数来实现。例如,阻塞I/O会暂停执行直到数据准备好;非阻塞I/O则不会等待,而是立即返回一个状态,让...

    HP服务器资料:I2O技术.doc

    4. **减少外围设备所需的驱动程序数量**:由于I2O技术提供了一种统一的I/O处理模型,对于支持I2O的设备,只需要较少的驱动程序即可,降低了维护和管理的复杂性。 I2O技术不仅适用于服务器,还可以应用于工作站和...

    netty实战指南

    为了克服这些问题,UNIX系统提供了五种I/O模型: 1. 阻塞I/O模型:系统调用如recvfrom会在数据准备好或出现错误时返回,期间进程会被阻塞。 2. 非阻塞I/O模型:当没有数据时,recvfrom会立即返回错误,需要轮询检查...

    5.1_1_I_O设备的基本概念和分类1

    在I/O模型中,有几种常见的处理方式: - 阻塞I/O:当一个进程尝试读取或写入I/O设备时,如果设备没有准备好,进程会被挂起,直到I/O操作完成。 - 非阻塞I/O:在这种模式下,进程不会被挂起,而是立即返回一个状态...

    unix网络编程卷二

    3. **异步I/O (Asynchronous I/O)**:与前面两种模型相比,异步I/O模型更进一步,它允许程序在发起I/O操作后立即返回,而由操作系统在后台完成实际的数据传输。当操作完成时,程序会收到通知。异步I/O模型在高并发...

Global site tag (gtag.js) - Google Analytics