阻塞的,从硬盘读取数据时,程序一直等待,数据读完在继续操作 。
操作时一次一个字节的读取数据,一个输出流一次输出一个字节数据,一个输出流一次消耗一个字节数据,数据的读取和写入效率不好。
I/O属于底层操作,性能依赖与系统环境。
NIO:
同步非阻塞I/O,在读取数据时程序可以继续执行,读取玩数据以后,通知当前程序(即硬件的中断,软件中的回调),然后程序立即或执行完后处理数据。选择器(selector)、缓冲(buffer)、管道(channel) 面向块(缓冲区)。采取“预读方式”。操作中一步产生或消费一个数据块,按块处理数据,同时数据读取到一个稍后可能会处理的缓冲区,需要时也可在缓冲区前后移动。
方式适用于连接数目多且连接比较短(轻操作)的架构。例如聊天工具。毕竟好用的框架Netty和Mina。
BIO:
同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
方式适用于连接数目比较小且固定的架构
AIO:
异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理.。
方式使用于连接数目多且连接比较长(重操作)的架构。
简单的介绍了下这些知识。详细的可以查看这篇文章:https://blog.csdn.net/huangwenyi1010/article/details/75577091?ref=myread
其它Java基础知识的总结篇就介绍到这里了,以后的博文主要编写的方向是Java的进阶知识了,主要内容为设计模式,源码解析和并发编程这块吧!至于后面的这些博文没有信心能够写好,毕竟这些相对于来说还是比较难以理解的。所以以后的这些相关博文我会按照自己的理解写的,如果写的不好,还请多多指点!
原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!
版权声明:
作者:虚无境
博客园出处:
CSDN出处:
个人博客出处: