这部分的东西在网络编程经常能看到,不过在所有IO处理中都是类似的。
IO请求的两个阶段:
等待资源阶段:IO请求一般需要请求特殊的资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。
使用资源阶段:真正进行数据接收和发生。
举例说就是排队和服务。
在等待数据阶段,IO分为阻塞IO和非阻塞IO。
阻塞IO:资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。
非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用
在使用资源阶段,IO分为同步IO和异步IO。
同步IO:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。
异步IO:应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用。
按照Unix的5个IO模型划分
-
阻塞IO
-
非阻塞IO
-
IO复用
-
信号驱动的IO
-
异步IO
从性能上看,异步IO的性能无疑是最好的。
各种IO的特点
-
阻塞IO:使用简单,但随之而来的问题就是会形成阻塞,需要独立线程配合,而这些线程在大多数时候都是没有进行运算的。Java的BIO使用这种方式,问题带来的问题很明显,一个Socket需要一个独立的线程,因此,会造成线程膨胀。
-
非阻塞IO:采用轮询方式,不会形成线程的阻塞。Java的NIO使用这种方式,对比BIO的优势很明显,可以使用一个线程进行所有Socket的监听(select)。大大减少了线程数。
-
同步IO:同步IO保证一个IO操作结束之后才会返回,因此同步IO效率会低一些,但是对应用来说,编程方式会简单。Java的BIO和NIO都是使用这种方式进行数据处理。
-
异步IO:由于异步IO请求只是写入了缓存,从缓存到硬盘是否成功不可知,因此异步IO相当于把一个IO拆成了两部分,一是发起请求,二是获取处理结果。因此,对应用来说增加了复杂性。但是异步IO的性能是所有很好的,而且异步的思想贯穿了IT系统放放面面。
分享到:
相关推荐
drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-confluence-plugin-11.2.5 drawio-...
赠送jar包:commons-io-2.11.0.jar; 赠送原API文档:commons-io-2.11.0-javadoc.jar; 赠送源代码:commons-io-2.11.0-sources.jar; 赠送Maven依赖信息文件:commons-io-2.11.0.pom; 包含翻译后的API文档:...
开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2开发工具 commons-io-1.3.2...
3-IO输出-点亮多个LED灯方法1(51单片机C语言实例Proteus仿真和代码)3-IO输出-点亮多个LED灯方法1(51单片机C语言实例Proteus仿真和代码)3-IO输出-点亮多个LED灯方法1(51单片机C语言实例Proteus仿真和代码)3-IO输出-...
赠送jar包:commons-io-1.3.2.jar; 赠送原API文档:commons-io-1.3.2-javadoc.jar; 赠送源代码:commons-io-1.3.2-sources.jar; 赠送Maven依赖信息文件:commons-io-1.3.2.pom; 包含翻译后的API文档:commons-io...
赠送jar包:commons-io-2.8.0.jar; 赠送原API文档:commons-io-2.8.0-javadoc.jar; 赠送源代码:commons-io-2.8.0-sources.jar; 赠送Maven依赖信息文件:commons-io-2.8.0.pom; 包含翻译后的API文档:commons-io...
赠送jar包:commons-io-2.5.jar; 赠送原API文档:commons-io-2.5-javadoc.jar; 赠送源代码:commons-io-2.5-sources.jar; 赠送Maven依赖信息文件:commons-io-2.5.pom; 包含翻译后的API文档:commons-io-2.5-...
4-IO输出-点亮多个LED灯方法2(51单片机C语言实例Proteus仿真和代码)4-IO输出-点亮多个LED灯方法2(51单片机C语言实例Proteus仿真和代码)4-IO输出-点亮多个LED灯方法2(51单片机C语言实例Proteus仿真和代码)4-IO输出-...
赠送jar包:commons-io-2.7.jar; 赠送原API文档:commons-io-2.7-javadoc.jar; 赠送源代码:commons-io-2.7-sources.jar; 赠送Maven依赖信息文件:commons-io-2.7.pom; 包含翻译后的API文档:commons-io-2.7-...
windows socket 五种IO模型-代码全攻略
2-IO输出-点亮1个LED灯方法2(51单片机C语言实例Proteus仿真和代码)2-IO输出-点亮1个LED灯方法2(51单片机C语言实例Proteus仿真和代码)2-IO输出-点亮1个LED灯方法2(51单片机C语言实例Proteus仿真和代码)2-IO输出-点亮1...
platformio.platformio-ide-2.4.3
Java IO commons-io-2.5.jar。 commons-io-2.5.jar 是Java IO的增强版,功能很强大。里面封装了很多实用方便的函数,文件操作、目录操作的。 Java IO
1-IO输出-点亮1个LED灯方法1(51单片机C语言实例Proteus仿真和代码)1-IO输出-点亮1个LED灯方法1(51单片机C语言实例Proteus仿真和代码)1-IO输出-点亮1个LED灯方法1(51单片机C语言实例Proteus仿真和代码)1-IO输出-点亮1...
Java IO框架 commons-io-2.11.0
这是工作以来积累的代码,包括常用util方法和常用功能模块
赠送jar包:commons-io-2.4.jar; 赠送原API文档:commons-io-2.4-javadoc.jar; 赠送源代码:commons-io-2.4-sources.jar; 赠送Maven依赖信息文件:commons-io-2.4.pom; 包含翻译后的API文档:commons-io-2.4-...
winsocket 5中IO模型-代码全攻略
Commons IO是apache的一个开源的工具包,封装了IO操作的相关类,包含了最新的commons-io-2.0.1-bin,commons-io-2.0.1-src,commons-io-2.0.1-doc
赠送jar包:commons-io-1.4.jar; 赠送原API文档:commons-io-1.4-javadoc.jar; 赠送源代码:commons-io-1.4-sources.jar; 赠送Maven依赖信息文件:commons-io-1.4.pom; 包含翻译后的API文档:commons-io-1.4-...