Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络服务器和客户端程序。换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比如客户端和服务端的协议。这是官方文档中的描述,作为Java初学者,这里面一个名词NIO是完全没有概念,为此专门查阅了相关资料,对NIO有了较为清晰的了解。

对于NIO的描述,通常都是和BIO、AIO进行对比说明的。下面将分别说明三者的概念。

        BIO: 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理(一客户端一线程)。该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发访问量增加后,服务端的线程数与客户端并发访问数呈1:1的关系,系统性能将急剧下降,随着并发访问量的继续增加,系统会发生线程堆栈溢出、创建新线程失败等问题,并最终导致宕机或僵死。

        NIO:异步非阻塞,服务器实现模式为一个请求一个线程,客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

对于NIO,有两点需要强调的:

(1)关于概念有两种理解,New I/O(相对于之前的I/O库是新增的)和Non-block I/O(非阻塞的)。由于NIO的目标就是让java支持非阻塞I/O,所有更多人喜欢用Non-block I/O。

(2)很多人喜欢将NIO称为异步非阻塞I/O,但是,如果按照严格的NUIX网络编程模型和JDK的实现进行区分,实际上它只是非阻塞I/O,不能称之为异步非阻塞I/O。但由于NIO库支持非阻塞读和写,相对于之前的同步阻塞读和写,它是异步的,因此很多人习惯称NIO为异步非阻塞I/O。

       AIO:JDK1.7升级了NIO库,升级后的NIO库被称为NIO2.0,正式引入了异步通道的概念。NIO2.0的异步套接字通道是真正的异步非阻塞I/O,此即AIO。其服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

BIO、NIO、AIO的区别——Netty系列(一)相关推荐

  1. java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  2. Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  3. Java的IO流 ,BIO NIO AIO 的区别?

    目录 1.在了解不同的IO之前先了解:同步与异步,阻塞与非阻塞的区别: 2.BIO NIO AIO 分别代表什么?(面试简答): 3.BIO和NIO.AIO的区别: 4.java中io流的分类: •  ...

  4. BIO ,NIO,AIO的区别

    IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSock ...

  5. java aio nio bio_3. 彤哥说netty系列之Java BIO NIO AIO进化史

    你好,我是彤哥,本篇是netty系列的第三篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 上一章我们介绍了IO的五种模型,实际上Java只支持其中的三种,即BIO/NIO/ ...

  6. Netty序章之BIO NIO AIO演变

    Netty序章之BIO NIO AIO演变 Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠的网络服务器和客户端程序.Netty简化了网络程序的开发,是很多框架和公司都在使用 ...

  7. IO之 java中BIO NIO AIO原理、区别以及应用

    在本篇文章中,我们主要介绍一下java中的BIO NIO AIO,重点是NIO 先说一下同步.异步.阻塞和非阻塞. 简单来讲,同步和异步是针对内核和应用程序之间的交互而言的:阻塞和非阻塞其实是针对进程 ...

  8. IO回忆录之怎样过目不忘(BIO/NIO/AIO/Netty)2017版

    有热心的网友加我微信,时不时问我一些技术的或者学习技术的问题.有时候我回微信的时候都是半夜了.但是我很乐意解答他们的问题.因为这些年轻人都是很有上进心的,所以在我心里他们就是很优秀的,我愿意多和努力的 ...

  9. Java中nio、bio和aio的区别

    前言:IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO.现在使用NIO的场景越来越多,很多网上的技术框架或多或少用到了NIO技术,譬如Tomcat.Jetty,还有基于 ...

最新文章

  1. C语言数据结构(大话数据结构——笔记4)第六章:树
  2. win7家庭版安装oracle,win7 home 版安装 Oracle 10g
  3. 编程语言发展史上有哪些趣事?
  4. 物联网VSWiFi 两强争霸还是携手并进?
  5. 奥比中光深度摄像头_奥比中光:确认iPhone X前置3D深度摄像头采用结构光方案...
  6. SQL Server 数据库之启动 SQL Server 2008 服务
  7. 二维码扫描枪为何在商超店铺中受到欢迎呢?
  8. 联盟显示服务器异常,玩英雄联盟ping值异常,我们如何检测网络问题,还是服务器?...
  9. mac游戏排行榜,mac好玩的游戏推荐 (一)
  10. Student的增删改查
  11. 建筑企业应采用电子招投标的10个理由
  12. 计算机日常英语句子,计算机英语句子
  13. 这份春招攻略,希望大家可以收藏!
  14. “黑马程序员”视频学习笔记之面向对象基础及调试问题
  15. 台式计算机功率一般多少瓦,笔记本功率一般是多少瓦的,实际功率又是多少?...
  16. 大公司github地址
  17. VS2017社区版Community 许可证过期解决方法
  18. IDEA创建Spring Boot项目(Demo)
  19. 修改gps定位器的服务器,两招教你拆除GPS定位器,个人拆除不是想想的那么简单?...
  20. 申通快递机器人上岗_申通快递机器人上岗 物流机器人在中国会是个大生意

热门文章

  1. 很好的一篇讲LTP在编解码中的作用的文章
  2. Android 自定义控件 按钮滚动选择
  3. 【Redis】14.Redis高级数据类型Bitmaps、HyperLogLog、GEO
  4. linux下安装nvm进行node的版本的快速切换
  5. 潘正磊谈微软研发团队管理和敏捷实践学习总结
  6. ADSL pppoe 拔号工具rp-pppoe
  7. 板邓:PHP获取当前页面url地址、参数
  8. binutils工具集之---nm
  9. PHP之GD函数的使用
  10. iOS版微信6.3.19更新发朋友圈可选可见范围