BIO、NIO、AIO的区别——Netty系列(一)
来源:互联网 发布:有限元软件ansys 编辑:程序博客网 时间:2024/05/18 15:54
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系列(一)
- BIO、NIO、AIO的区别——Netty系列(一)
- BIO与NIO、AIO的区别(一)
- talent-aio的使用和原理讲解系列(一)--java bio、nio、aio的io模型区别讲解
- bio nio aio的区别
- BIO,NIO,AIO的区别
- BIO,NIO,AIO的区别
- BIO,NIO,AIO的区别
- BIO,NIO,AIO及netty的介绍
- BIO、NIO、AIO区别
- Java BIO、NIO、AIO的区别
- JAVA中NIO,BIO,AIO的区别
- AIO、BIO和NIO的区别详解
- BIO,NIO和AIO的区别
- Java BIO,NIO,AIO的区别
- BIO与NIO、AIO的区别
- BIO与NIO、AIO的区别
- BIO、NIO和AIO的区别
- [BZOJ3545][ONTAK2010]Peaks(splay启发式合并)
- web.xml 修改时,很卡的解决办法
- muduo库的TcpServer和TcpConnection用法
- Android开发重要参考资料
- java中queue的使用
- BIO、NIO、AIO的区别——Netty系列(一)
- MAC iterm2-zsh
- 【电影】血战钢锯岭(Hacksaw Ridge)
- nginx root alias
- mysql调试存储过程
- Problem-2037 今年暑假不AC
- 【20160327】"尚学堂杯"哈尔滨理工大学第六届程序设计竞赛A.B.C.D.E.G题解
- 【java学习记录】13.实现简单的浏览器功能:获取源代码、保存源代码、获取图片
- 使用百度地图