【转】BIO,NIO和AIO
本文转自:https://blog.csdn.net/qxy_1218/article/details/123941039
BIO,NIO和AIO是Java网络编程的三种模型
BIO:同步并阻塞,服务实现模式为一个连接对应一个线程,即客户端发送一个连接,服务端要有一个线程来处理。如果连接多了,线程数量不够,就只能等待,即会发生阻塞。
NIO:同步非阻塞,服务实现模式是一个线程可以处理多个连接,即客户端发送的连接都会注册到多路复用器上,然后进行轮询连接,有I/O请求就处理
AIO:异步非阻塞,引入了异步通道,采用的是proactor模式,特点是:有效的请求才启动线程,先有操作系统完成在通知服务端
应用场景:
BIO:适用连接数目比较小且固定的架构,对服务器要求比较高,并发局限于应用中
NIO:适用连接数目多且连接比较短的架构,如:聊天服务器,弹幕系统等,编程比较复杂
AIO:适用连接数目多且连接长的架构,如相册服务器
BIO和NIO的区别
1.BIO主要是以I/O流的形式处理数据;NIO以I/O块(buffer)的形式处理数据,效率:块>流
2.BIO是阻塞的,NIO是非阻塞的
3.BIO主要是以字节流和字符流操作,NIO是基于channel(通道)、buffer(缓冲区)操作的;selector(选择器)是用来监听channel的
4.BIO是单向的,要么是输入流要么是输出流,NIO是双向的,可以从channel往buffer读写数据,同时buffer也可以向channel读写数据
NIO的三大核心流程图
selector(选择器),channel(通道),buffer(缓冲区)
从图可以看出,一个线程对应selector,selector对应三个channel,channel又对应buffer(双向)。程序切换到哪个channel取决于event事件决定,selector会根据事件去切换channel。
buffer是一个内存块,底层有一个数组
最新文章
- HTML5视频播放
- Angularjs 服务注册
- DB2 嵌入式应用中定义游标(开放平台上)
- AngularJS 乱记
- phpcmsv9的评论分表策略
- 【jQuery基础学习】04 jQuery中的表格操作及cookie插件的使用
- HTML5 :b/strong加粗,i/em倾斜区别
- Android 脚本替换PackageName
- IIS7/8 HTTP Error 500.19 错误 0x80070021
- Java从入门到精通——数据库篇之OJDBC版本区别
- CentOS VPS创建pptpd VPN服务
- ArcGIS网络分析之Silverlight客户端路径分析(三)
- PHP获取当前类名、函数名、方法名
- Verilog code
- ionic build android 中的报错详细原因以及解决方法
- Java集合详解一
- 处女作《Web全栈开发进阶之路》出版了!
- PM意识升级2.0
- MySQL学习笔记Windows篇<;一>; Welcome to MySQL
- POJ-1456 Supermarket 销售商品【贪心】+【并查集】