美文网首页
java nio的理解

java nio的理解

作者: ZMRWEGo | 来源:发表于2019-05-28 10:41 被阅读0次

java nio是一种区别BIO的新I/O模型,nio即new I/O。它应该包括我们常说的同步非阻塞模型,以及异步非阻塞模型。

一、nio的三大组件

  • channel
    一个channel对应一个socket连接,nio相较于bio的一个优点就是,它不用每次对每一个socket连接都新开线程,而使用一个线程完成对所有socket连接的监控,当监控到socket可读、可写才停下来进行读写操作。通道是双向的而流(inputstream outputstream)是单向的,一个channel支持同时读写操作,而一个stream,只能进行读或者写
  • buffer
    这里buffer实际上就是一个字节数组
  • selector
    选择器,判断channel的状态写就绪、读就绪、有连接到来,执行相应的事件处理。

二、线程模型的优化

nio模型中,我们可以完全使用一个线程来管理所有的socket io,没有i/o切换,只是拼命的进行读、写、选择事件.但是现在的服务器,一般都是多核处理器,我们可以充分利用多核处理的优势来提升效率
优化:

  1. 事件分发器:单线程选择就绪的事件,注意,select是阻塞的,无论是通过操作系统的通知(epoll)还是不停的轮询(select,poll),这个函数是阻塞的
  2. I/O处理器,包括connect、read、write等,这种纯cpu操作,一般开启核心个线程就可以
  3. 业务线程,业务一般还有自己的业务逻辑,可能包含db操作或者rpc,只要有阻塞就开启线程

三、Reactor与Proactor的模式

nio的模式主要分为两种reactor与proactor。
reactor事件分发器将事件分发给对应的函数进行处理,这个操作是一个同步i/o操作
proactor模式直接发起一个异步的读写操作,而实际的i/o操作由操作系统完成。

相关文章

网友评论

      本文标题:java nio的理解

      本文链接:https://www.haomeiwen.com/subject/nuhrtctx.html