Netty 与三种 I/O 模式
经典的三种 I/O 模式
生活场景:
当我们去饭店吃饭时:
- 食堂排队打饭模式:排队在窗口,打好才走;
- 点单/等待被叫模式:等待被叫,好了自己去端;
- 包厢模式:点单后菜直接被端上桌。
![](https://cdn.jsdelivr.net/gh/yuehungege/images/img/image-20200428170607722.png)
![image-20200428170716650](https://cdn.jsdelivr.net/gh/yuehungege/images/img/image-20200428170716650.png)
Netty 对三种 I/O 模式的支持
![image-20200428170829642](https://cdn.jsdelivr.net/gh/yuehungege/images/img/image-20200428170829642.png)
为什么 Netty 仅支持 NIO 了?
![image-20200428170857393](https://cdn.jsdelivr.net/gh/yuehungege/images/img/image-20200428170857393.png)
为什么 Netty 有多种 NIO 实现?
![image-20200428170940202](https://cdn.jsdelivr.net/gh/yuehungege/images/img/image-20200428170940202.png)
通用的 NIO 实现(Common)在 Linux 下也是使用 epoll,为什么自己单独实现?
实现的更好!
- NIO 暴露了更多的可控参数,例如:
- JDK 的 NIO 默认实现是水平触发。
- Netty 是边缘触发(默认)和水平触发可切换。
- Netty 实现的垃圾回收更少、性能更好。
NIO 一定优于 BIO 吗?
- BIO 代码简单。
- 特定场景:连接数少,并发度低,BIO 性能不输 NIO。