提到I/O模型,会有几个概念:
这里会有四种组合:
- 同步阻塞I/O
- 同步非阻塞I/O
- 异步阻塞I/O
- 异步非阻塞I/O
在解释这些概念之前首先需要先明确一些问题。
- 对于I/O操作一共参与方除了《应用程序》,《I/O对象,比如file,socket》,还有《操作系统》
在这里需要说明操作系统扮演着很重要的元素。因为很多种实现中需要操作系统作为“中介方”-提供服务。
- 不同操作系统在扮演“中介方”的具体实现上可能有些不同,但是并不影响上述概念。
一个应用发出了一次I/O操作后(read/write),其实接下去有两件事情需要注意:
- 由谁去检查是否可以进行操作了
- 在发出操作至确认可以去操作的那段时间中应用可以做什么
OK,到这里就比较清楚了。
第一个问题,其实就是表明了该套系统是同步还是异步的。
- 如果是应用自己负责去检查(通常是轮训)则是同步的。
- 而如果是系统负责通知(多路复用,信号驱动)则是异步的。
在参考帖子里看到一个比喻,我觉得很合适,便是去银行办业务,排队。如果没有任何机制,用户(应用)需要不断的去观察队伍是不是空了,可以进行业务操作了(I/O操作),虽然这时还可以进行其他操作(这个就是非阻塞了),但是可想而知这个效率了。
实际上,银行提供了一个号码纸。当轮到指定用户后,银行会广播通知(这个其实就是多路复用)或者直接通知那个指定的用户(信号驱动),这样便是异步的。在采用这种机制的系统中,应用便从监视中解放了出来,可以去做其他事情。此时应用就是非阻塞的,但是应用仍然可以采用阻塞模式。
第二个问题,就是判断是否是阻塞操作的
在同步I/O中,如果既要负责是否可以操作,又要去做其他事情,这边是非阻塞模式,但通常效率很低,所以一般都是阻塞线程了。
对于异步I/O中,通常应用在发出需要I/O操作后,有系统负责通知应用是否可以进行操作了。所以应用肯定是可以去做其他事情的,也就是非阻塞的。但是应用可以选择工作在阻塞模式下。
总结一下:
同步模式下:由于应用需要检查是否可以进行操作,是否往往就是阻塞的。
异步模式下:由于检查是否可以进行操作有系统负责了,所以应用便可以选择是在阻塞还是飞阻塞模式下工作了。
这里一个关键问题是系统是如何负责通知应用的,这个与操作系统底层有比较紧密的联系。比如linux提供select和epoll函数,及信号量机制。但是这些还不是真正的异步。
而接下来,无论是linxu还是windows都会支持真正的异步模式,对于java这个特性需要jdk7才能够支持了。
参考帖子:
http://blog.csdn.net/kangojian/archive/2010/07/03/5710977.aspx
http://www.iteye.com/topic/868702#1847693
http://www.ibm.com/developerworks/cn/linux/l-async/
- 大小: 43.4 KB
分享到:
相关推荐
Java I/O详细笔记
Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行...
java学习笔记1(java io/nio)设计模式
java NIO的基本知识点学习笔记,不包含具体代码
IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的... IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。 所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 )
Contents: 1 核心概念以及基本读写 2 缓冲区的实现机制 3 连网与异步IO 4 分散和聚集IO 5 文件锁定
深入探究文件 I/O:深入了解了文件 I/O 中的一些细节,譬如文件的管理方式、 错误返回的处理、空洞文件、O_APPEND 和 O_TRUNC 标志、原子操作与竞争冒险等等
Java相关课程系列笔记之八JavaScript学习笔记(建议用WPS打开) Java相关课程系列笔记之二Oracle学习笔记(建议用WPS打开) Java相关课程系列笔记之九Servlet学习笔记(建议用WPS打开) Java相关课程系列笔记之六...
文件I/O基础-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
标准I/O库-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
JAVA JDK学习笔记i\o部分 全面介绍了I/O流的各个对象的使用方法
javaNIO学习笔记(csdn)————程序
java笔记java笔记java笔记java笔记java笔记java笔记java笔记
尚硅谷java教程全程跟听,手动整理,从面向对象开始按章节按课时整理,适合对照视频作为笔试使用/java知识脉络梳理/八股理解背诵
自己总结的java中NIO的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者
NIO笔记.doc
NULL 博文链接:https://zheng12tian.iteye.com/blog/1094811
Java相关课程系列笔记之一Java学习笔记 Java相关课程系列笔记之四JDBC学习笔记 Java相关课程系列笔记之六HTML学习笔记 Java相关课程系列笔记之七CSS学习笔记 Java相关课程系列笔记之八JavaScript学习笔记 Java相关...
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
java笔记java笔记,java笔记java笔记java笔记java笔记