何方社区
  • -

552

0 网友分享了链接

BIO、NIO 和 AIO 的区别?

2020-08-18 06:14:47

BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。伪异步 IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。
NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求时才启动一个线程进行处理。
AIO:一个有效请求一个线程,客户端的 I/O 请求都是由 OS 先完成了再通知服务器应用去启动线程进行处理,
BIO 是面向流的,NIO 是面向缓冲区的;BIO 的各种流是阻塞的。而 NIO 是非阻塞的;BIO的 Stream 是单向的,而 NIO 的 channel 是双向的。

NIO 的特点:事件驱动模型、单线程处理多任务、非阻塞 I/O,I/O 读写不再阻塞,而是返回 0、基于 block 的传输比基于流的传输更高效、更高级的 IO 函数 zero-copy、IO 多路复用大大提高了 Java 网络应用的可伸缩性和实用性。基于 Reactor 线程模型。在 Reactor 模式中,事件分发器等待某个事件或者可应用或个操作的状态发生,事件分发器就把这个事件传给事先注册的事件处理函数或者回调函数,由后者来做实际的读写操作。如在 Reactor 中实现读:注册读就绪事件和相应的事件处理器、事件分发器等待事件、事件到来,激活分发器,分发器调用事件对应的处理器、事件处理器完成实际的读操作,处理读到的数据,注册新的事件,然后返还控制权

    文章最多点击量
  1. 劝学-先秦-荀子 0
  2. 随记 0
  3. MySQL8如何设置表名大小写不敏感? 1
  4. quartz 表名应该大写还是小写 0
  5. CentOS8下安装mysql8 10
  6. Nginx启动报错:could not open error log file: open() "/usr/local/nginx/logs/error.log" failed 3
  7. mysql修改密码 4
  8. mysql如果没有就插入,如果有就更新 1
  9. BIO、NIO 和 AIO 的区别? 0
  10. 记一次linux ssh密钥登陆失败的解决方式 2
  11. 搭建Git服务器 1
  12. 如何在CentOS中开启Swap 5
  13. 《失控》图书推荐 3
  14. Netty 的高性能表现在哪些方面? 0
  15. Netty 的零拷贝实现? 3
  16. 如何选择序列化协议? 1
  17. 了解哪几种序列化协议? 1
  18. Netty 的线程模型? 0
  19. Netty 的特点? 4
  20. NIO 的组成? 0
  21. XssFilter Jsoup 富文本过滤后 @RequestBody 解析json 失败 4
  22. 不能反向序列化 0
  23. 网站待优化 0
  24. Kafka面试题 2
  25. nacos配置管理 4
  26. 前端js防抖 3
  27. Docker学习0001 40
  28. 待整理todo 1
  29. shell重启java应用 0
  30. 调整 ubuntu swap 大小 2
使用本站请开启cookie和JavaScript