网站开发和程序开发,天河网站开发,网站需要访客上传图片该怎么做,公司注册资金最低标准Java中的IO模型
Java中的BIO#xff0c;NIO#xff0c;AIO概念可以是针对输入输出流#xff0c;文件#xff0c;和网络编程等其他IO操作的。 但是主要还是在网络编程通信过程中比较重要#xff0c;因为很多情况网络编程需要它们来提供更好的性能。 所以本篇文章偏向于网络…Java中的IO模型
Java中的BIONIOAIO概念可以是针对输入输出流文件和网络编程等其他IO操作的。 但是主要还是在网络编程通信过程中比较重要因为很多情况网络编程需要它们来提供更好的性能。 所以本篇文章偏向于网络编程中的BIONIO。 在Java中 BIO即Blocaking IO同步阻塞IO NIO即Non-Blocking IO同步非阻塞IO AIO即Asynchronous IO异步IO 这里的AIO由于使用实现困难。目前应用并不广泛。在系统性能要求较高时NIO即可满足需求且具有更简单的实现。
与操作系统IO模型的概念区分
上一篇文章就是操作系统中的IO模型有五种。阻塞非阻塞多路复用异步信号驱动IO。 这里就要注意了。 Java里的BIO和NIO不就是阻塞IO和非阻塞IO吗这样不是概念重合了吗 其实不是的。 对于BIO与操作系统中的阻塞IO概念确实基本一致对于连接与线程是一对一的关系连接不做事线程就会阻塞。 但是NIO却不一样Java的NIO准确来说是非阻塞的IO多路复用模型。实际上对应的是操作系统IO模型中多路复用的实现。而非阻塞则是多路复用的基础二者并不是互斥的关系。 之前的Java NIO文章说过。NIO使用ChannelSelectorBuffer来进行网络通信。 其中的Selector就是实现多路复用的组件。使用上就是把Channel及对应想监听的事件注册到Selector上通过单个线程调用Selector.select()来监听多个注册到其上面的Channel的事件。有事件发生就停止阻塞状态返回发生的事件数通过SelectedKeys遍历发生的事件进行处理。 再想想操作系统中的IO多路复用不都是一个进程或者线程来监听多个IO事件吗。 当然多路复用的具体实现在LInux上有select,poll,epoll这三种。Java NIO在Linux系统上使用的就是epoll机制。
结语
NIO的概念与IO模型中的非阻塞IO虽然名字都是非阻塞但是实际上Java NIO是多路复用的。 我觉得可能有人分不清所以写了一下。 最近再学RPC怎么写。
后面可能出一篇Netty的线程模型。三种多路复用实现。
感谢阅读如有错漏烦请批评指正