NIO模型
同步非阻塞
NIO有同步阻塞和同步非阻塞两种模式,一般讲的是同步非阻塞,服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO模型
异步非阻塞
服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,
注:AIO又称为NIO2.0,在JDK7才开始支持。

为什么Netty使用NIO而不是AIO?

  1. Netty不看重Windows上的使用,在Linux系统上,AIO的底层实现仍使用EPOLL,没有很好实现AIO,因此在性能上没有明显的优势,而且被JDK封装了一层不容易深度优化
  2. Netty整体架构是reactor模型, 而AIO是proactor模型, 混合在一起会非常混乱,把AIO也改造成reactor模型看起来是把epoll绕个弯又绕回来
  3. AIO还有个缺点是接收数据需要预先分配缓存, 而不是NIO那种需要接收时才需要分配缓存, 所以对连接数量非常大但流量小的情况, 内存浪费很多
  4. 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)

不比nio块在Unix系统上

不支持数据报

不必要的线程模型(太多没什么用的抽象化)

转载于:https://www.cnblogs.com/dzhou/p/10504442.html

netty 为什么用nio 不用 aio相关推荐

  1. BIO、NIO、AIO、Netty面试题(总结最全面的面试题)

    BIO.NIO.AIO.Netty 什么是IO Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流.简单来说就是java通过io流方 ...

  2. BIO、NIO、AIO、Netty面试题(总结最全面的面试题!!!)

    BIO.NIO.AIO.Netty 什么是IO Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流.简单来说就是java通过io流方 ...

  3. Netty入门之BIO,NIO和AIO编程

    Netty简介 Netty 的介绍 Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目. Netty 是一个异步的.基于事件驱动的网络应用框架,用以快速开发 ...

  4. BIO、NIO、AIO的区别——Netty系列(一)

    Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序.换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比如客户端和服务端的协 ...

  5. 坦克大战 - 设计模式、BIO、NIO、AIO、Netty

    设计模式 1.策略模式 有时候你想发射单排子弹,有时候你想发射双排子弹. 当你想有不同的子弹发射方式时,应该怎么做才能在尽可能少的修改代码的前提下,快速完成这些子弹发射策略的切换呢? 办法就是,你写一 ...

  6. Netty原理(一)BIO,NIO,AIO

    同步和异步 Java提供了三种IO模型,分别是BIO,NIO和AIO.所谓的IO就是选择用什么样的通道进行数据的收发.在这三种IO之前需要弄清楚阻塞和异步的概念.阻塞和异步描述的对象是不一样的,前者描 ...

  7. 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端

    承接上文的操作系统,关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 ...

  8. bio linux 创建_不断升级,Java之BIO、NIO、AIO的演变

    一.前言 一句话概括BIO NIO AIO: 第一阶段,服务端采用同步阻塞的BIO: 第二阶段,服务端采用同步阻塞的线程池的BIO: 第三阶段,JDK4之后服务端采用同步非阻塞的NIO: 第四阶段,J ...

  9. nio和bio的原理_Java的BIO,NIO和AIO的区别于演进

    前言 Java里面的IO模型种类较多,主要包括BIO,NIO和AIO,每个IO模型都有不一样的地方,那么这些IO模型是如何演变呢,底层的原理又是怎样的呢? 本文我们就来聊聊. BIO BIO全称是Bl ...

最新文章

  1. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
  2. android系统短信库的一些用法
  3. 【GLib】GLib学习笔记(一):GLib、GObject、GType
  4. TFS中的测试计划(十)
  5. poj1274(最大匹配)
  6. 安卓中如何判断一个字符串是否为空
  7. 数据显示:7月份BCH链上交易量较3月份激增逾900%
  8. java面试 socket_【面试题】Java 的通信编程,编程题(或问答),用JAVA SOCKET 编程,读服务器几个字符,再写入本地显示?...
  9. 1.11 为什么使用卷积-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  10. 13.5.SolrCloud集群使用手册之数据导入
  11. 面试加分项!Android权限处理,手慢无
  12. php的set 容器,关于STL中set容器的一些总结
  13. 总结深度学习各种网络结构【更新中...】
  14. win764位和32位有什么区别_32位、64位它们是什么关系?它们又有什么区别?
  15. mongodb 备份压缩_MongoDB-备份和恢复
  16. eclipse修改git账号信息
  17. Android中AndFix使用
  18. 集合Collections,List
  19. mysql中sex数据类型_MySQL数据类型+简单操作
  20. 计算机多媒体简历,[计算机个人简历模板范文]计算机多媒体专业个人简历

热门文章

  1. 紫书 习题 10-20 UVa 1648 (推公式)
  2. 对datatable操作经验-排序和分页
  3. 使用swipecard实现卡片视图左右滑动监听以及点击监听
  4. php中的session机制
  5. Android TextView内容过长加省略号,点击显示全部内容
  6. WPF不同线程之间的控件的访问
  7. Could not create JarEntryRevision
  8. gradle生命周期
  9. [置顶] C#中Socket服务端代码分享
  10. 公司app 从兼容Android 8.0 升级兼容9.0