netty 为什么用nio 不用 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)
不比nio块在Unix系统上
不支持数据报
不必要的线程模型(太多没什么用的抽象化)
转载于:https://www.cnblogs.com/dzhou/p/10504442.html
netty 为什么用nio 不用 aio相关推荐
- BIO、NIO、AIO、Netty面试题(总结最全面的面试题)
BIO.NIO.AIO.Netty 什么是IO Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流.简单来说就是java通过io流方 ...
- BIO、NIO、AIO、Netty面试题(总结最全面的面试题!!!)
BIO.NIO.AIO.Netty 什么是IO Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流.简单来说就是java通过io流方 ...
- Netty入门之BIO,NIO和AIO编程
Netty简介 Netty 的介绍 Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目. Netty 是一个异步的.基于事件驱动的网络应用框架,用以快速开发 ...
- BIO、NIO、AIO的区别——Netty系列(一)
Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序.换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比如客户端和服务端的协 ...
- 坦克大战 - 设计模式、BIO、NIO、AIO、Netty
设计模式 1.策略模式 有时候你想发射单排子弹,有时候你想发射双排子弹. 当你想有不同的子弹发射方式时,应该怎么做才能在尽可能少的修改代码的前提下,快速完成这些子弹发射策略的切换呢? 办法就是,你写一 ...
- Netty原理(一)BIO,NIO,AIO
同步和异步 Java提供了三种IO模型,分别是BIO,NIO和AIO.所谓的IO就是选择用什么样的通道进行数据的收发.在这三种IO之前需要弄清楚阻塞和异步的概念.阻塞和异步描述的对象是不一样的,前者描 ...
- 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端
承接上文的操作系统,关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 ...
- bio linux 创建_不断升级,Java之BIO、NIO、AIO的演变
一.前言 一句话概括BIO NIO AIO: 第一阶段,服务端采用同步阻塞的BIO: 第二阶段,服务端采用同步阻塞的线程池的BIO: 第三阶段,JDK4之后服务端采用同步非阻塞的NIO: 第四阶段,J ...
- nio和bio的原理_Java的BIO,NIO和AIO的区别于演进
前言 Java里面的IO模型种类较多,主要包括BIO,NIO和AIO,每个IO模型都有不一样的地方,那么这些IO模型是如何演变呢,底层的原理又是怎样的呢? 本文我们就来聊聊. BIO BIO全称是Bl ...
最新文章
- BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
- android系统短信库的一些用法
- 【GLib】GLib学习笔记(一):GLib、GObject、GType
- TFS中的测试计划(十)
- poj1274(最大匹配)
- 安卓中如何判断一个字符串是否为空
- 数据显示:7月份BCH链上交易量较3月份激增逾900%
- java面试 socket_【面试题】Java 的通信编程,编程题(或问答),用JAVA SOCKET 编程,读服务器几个字符,再写入本地显示?...
- 1.11 为什么使用卷积-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- 13.5.SolrCloud集群使用手册之数据导入
- 面试加分项!Android权限处理,手慢无
- php的set 容器,关于STL中set容器的一些总结
- 总结深度学习各种网络结构【更新中...】
- win764位和32位有什么区别_32位、64位它们是什么关系?它们又有什么区别?
- mongodb 备份压缩_MongoDB-备份和恢复
- eclipse修改git账号信息
- Android中AndFix使用
- 集合Collections,List
- mysql中sex数据类型_MySQL数据类型+简单操作
- 计算机多媒体简历,[计算机个人简历模板范文]计算机多媒体专业个人简历