目录

1、 什么是经典的三种 I/O 模式 ?

2、Netty 对三种 I/O 模式的支持 ?

3、为什么 Netty 仅支持 NIO 了?

4、为什么 Netty 有多种 NIO 实现?

5、NIO 一定优于 BIO 么?

6、Netty 怎么切换 I/O 模式?


 

1、 什么是经典的三种 I/O 模式 ?

Netty 学习 第二章:Netty 源码:从“点”(领域知识)的角度剖析
三种I/O模式

1)阻塞与非阻塞

菜没好,要不要死等 -> 数据就绪前要不要等待?

阻塞:没有数据传过来时,读会阻塞直到有数据;缓冲区满时,写操作也会阻塞;非阻塞:遇到这些情况,都是直接返回。

2)同步与异步

菜好了,谁端 -> 数据就绪后,数据操作谁完成?

同步:数据就绪后需要自己去读;异步:数据就绪直接读好再回调给程序是;

2、Netty 对三种 I/O 模式的支持 ?

Netty 学习 第二章:Netty 源码:从“点”(领域知识)的角度剖析
Netty 对三种 I/O 模式的支持

3、为什么 Netty 仅支持 NIO 了?

1)为什么不建议(deprecate)阻塞 I/O(BIO/OIO)?

      •连接数高的情况下:阻塞 -> 耗资源、效率低

2)为什么删掉已经做好的 AIO 支持?

      • Windows 实现成熟,但是很少用来做服务器。

      • Linux 常用来做服务器,但是 AIO 实现不够成熟。

      • Linux 下 AIO 相比较 NIO 的性能提升不明显 。

4、为什么 Netty 有多种 NIO 实现?

Netty 学习 第二章:Netty 源码:从“点”(领域知识)的角度剖析
Netty 多种 NIO 实现

        通用的 NIO 实现(Common)在 Linux 下也是使用 epoll,为什么自己单独实现?

实现得更好!

• Netty 暴露了更多的可控参数,例如:

       • JDK 的 NIO 默认实现是水平触发

       • Netty 是边缘触发(默认)和水平触发可切换

• Netty 实现的垃圾回收更少、性能更好

5、NIO 一定优于 BIO 么?

BIO 代码简单。 • 特定场景:连接数少,并发度低,BIO 性能不输 NIO。

6、Netty 怎么切换 I/O 模式?

从 NIO 切换到 OIO • 原理是:

• ServerSocketChannel:工厂模式+泛型+反射实现

• 服务器开发并不需要切换客户端对应NioSocketChannel 

• ServerSocketChannel 负责创建对应的 SocketChannel 。

 

更多精彩内容如下:

Netty 学习 第二章:Netty 源码:从“点”(领域知识)的角度剖析

相关文章:

  • 2021-12-22
  • 2021-08-03
  • 2021-05-01
  • 2021-11-28
  • 2021-06-29
  • 2021-11-30
  • 2021-10-28
  • 2021-10-05
猜你喜欢
  • 2021-06-12
  • 2021-09-24
  • 2021-06-06
  • 2022-12-23
  • 2022-02-08
  • 2021-12-06
  • 2021-05-25
相关资源
相似解决方案