聊聊nio
bio叫做同步阻塞的io模型, 数据的读取和写入必须阻塞在一个线程里面, 等待完成, 也就是说, 当连接数不是很高, 例如说, 只有不到1000的连接数的这么一个情况的时候, 这种模型是很不错的, 可以让每一个连接都专注于自己的一个io, 并且编码简单, 更不用去考虑系统的一个过载和限流的问题, 更何况线程池本身就有等待和缓冲的这么一个作用, 连接量不高的情况下是可以兼顾性能和连接量的.
但是当我们的连接数一旦大的时候, 传统的bio模型是十分无力的.
nio, 叫做同步非阻塞的这么一个io模型, 在java的1.4就引入了nio的框架, 在java.nio包下, 提供了这些Channel(通道\频道), Selector(选择器)和Buffer(缓冲)这些抽象类.
nio中的n可以理解为non-blocking(非阻塞), 是支持面向缓冲面向通道的一个io操作, nio提供了和传统io模型中的socket, serversocket相对应的一个socket channel和serversocket channel这两种不同的套接字的通道的实现.
这两种通道都支持阻塞和非阻塞的一个模型, 阻塞就和传统的bio是一样的了.(性能和可靠性都一般). 但是非阻塞就正好相反.
低负载, 低并发的应用程序可以使用阻塞的io模型来提高效率, 以及更好的维护, 因为代码比较简单.
而对于这种高负载, 高并发的这种应用, 我们应该使用nio这种非阻塞的模型来进行开发.
1183

被折叠的 条评论
为什么被折叠?



