本文转自: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是一个内存块,底层有一个数组

最新文章

  1. HTML5视频播放
  2. Angularjs 服务注册
  3. DB2 嵌入式应用中定义游标(开放平台上)
  4. AngularJS 乱记
  5. phpcmsv9的评论分表策略
  6. 【jQuery基础学习】04 jQuery中的表格操作及cookie插件的使用
  7. HTML5 :b/strong加粗,i/em倾斜区别
  8. Android 脚本替换PackageName
  9. IIS7/8 HTTP Error 500.19 错误 0x80070021
  10. Java从入门到精通——数据库篇之OJDBC版本区别
  11. CentOS VPS创建pptpd VPN服务
  12. ArcGIS网络分析之Silverlight客户端路径分析(三)
  13. PHP获取当前类名、函数名、方法名
  14. Verilog code
  15. ionic build android 中的报错详细原因以及解决方法
  16. Java集合详解一
  17. 处女作《Web全栈开发进阶之路》出版了!
  18. PM意识升级2.0
  19. MySQL学习笔记Windows篇<一> Welcome to MySQL
  20. POJ-1456 Supermarket 销售商品【贪心】+【并查集】

热门文章

  1. 2023 年 CCF 春季测试赛模拟赛 - 2 题解
  2. NSIS 自定义界面,下载并安装Net.Framework4.8
  3. python怎么实现正确的浮点数四舍五入
  4. datax缺少clickhouse reader插件
  5. C++数组(二):二维数组
  6. hexo-theme-tree
  7. HID类的JoyStick描述符
  8. Java脚本操作mysql和接口
  9. REPLACE,TRANSLATE
  10. 云函数调用云函数 openid不存在