加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘南站长网 (https://www.0941zz.com/)- 科技、行业物联网、开发、云计算、云管理!
当前位置: 首页 > 编程开发 > Java > 正文

为什么Netty使用NIO而不是AIO

发布时间:2023-02-16 13:44:22 所属栏目:Java 来源:互联网
导读:NIO模型 同步非阻塞 NIO有同步阻塞和同步非阻塞两种模式,一般讲的是同步非阻塞,服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。 AIO模型 异步非阻塞 服务器实
  NIO模型
  同步非阻塞
  NIO有同步阻塞和同步非阻塞两种模式,一般讲的是同步非阻塞,服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
  AIO模型
  异步非阻塞
  服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,
  注:AIO又称为NIO2.0,在JDK7才开始支持。
 
  为什么Netty使用NIO而不是AIO?
 
  Netty不看重Windows上的使用,在Linux系统上,AIO的底层实现仍使用EPOLL,没有很好实现AIO,因此在性能上没有明显的优势,而且被JDK封装了一层不容易深度优化
  Netty整体架构是reactor模型,而AIO是proactor模型,混合在一起会非常混乱,把AIO也改造成reactor模型看起来是把epoll绕个弯又绕回来
  AIO还有个缺点是接收数据需要预先分配缓存,而不是NIO那种需要接收时才需要分配缓存,所以对连接数量非常大但流量小的情况,内存浪费很多
  Linux上AIO不够成熟,处理回调结果速度跟不到处理需求,比如外卖员太少,顾客太多,供不应求,造成处理速度有瓶颈(待验证)
  作者原话:
  Not faster than NIO (epoll) on unix systems (which is true)
  There is no daragram suppport
  Unnecessary threading model (too much abstraction without usage)
 
  其他:
  Netty背后的事件驱动机制
  总结
  以上是编程之家为你收集整理的为什么Netty使用NIO而不是AIO?全部内容。
 
  如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给好友。
 
  原文地址:https://blog.csdn.net/thlzjfefe" target="_blank" rel="noopener" title="thlzjfefe">thlzjfefe</a> <img class="article-time-img article-heard-img" src="https://csdnimg.cn/release/blo

(编辑:甘南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读