Netty 怎么切换三种 I/O 模式什么是经典的三种 I/O 模式?
生活场景:
当我们去饭店吃饭时:
• 食堂排队打饭模式:排队在窗口,打好才走;
• 点单、等待被叫模式:等待被叫,好了自己去端;
• 包厢模式:点单后菜直接被端上桌 。
• 阻塞与非阻塞
1) 菜没好,要不要死等 -> 数据就绪前要不要等待?
2) 阻塞:没有数据传过来时,读会阻塞直到有数据;缓冲区满时,写操作也会阻塞 。
非阻塞遇到这些情况,都是直接返回 。
• 同步与异步
1) 菜好了,谁端 -> 数据就绪后,数据操作谁完成?
2) 数据就绪后需要自己去读是同步,数据就绪直接读好再回调给程序是异步 。

文章插图
Netty 对三种 I/O 模式的支持如图:

文章插图
为什么 Netty 有多种 NIO 实现?
通用的 NIO 实现(Common)在 linux 下也是使用 epoll,为什么自己单独实现?
实现得更好!
• Netty 暴露了更多的可控参数,例如:
JDK 的 NIO 默认实现是水平触发
Netty 是边缘触发(默认)和水平触发可切换
• Netty 实现的垃圾回收更少、性能更好

文章插图
NIO 一定优于 BIO 么?
• BIO 代码简单 。
• 特定场景:连接数少,并发度低,BIO 性能不输 NIO 。
Netty 如何支持三种 Reactor什么是 Reactor 及三种版本?
生活场景:饭店规模变化
• 一个人包揽所有:迎宾、点菜、做饭、上菜、送客等;
• 多招几个伙计:大家一起做上面的事情;
• 进一步分工:搞一个或者多个人专门做迎宾 。
1. 一个人包揽所有:迎宾、点菜、做饭、上菜、送客等 -> Reactor 单线程
2. 多招几个伙计:大家一起做上面的事情 -> Reactor 多线程模式
3. 进一步分工:搞一个或者多个人专门做迎宾 -> 主从 Reactor 多线程模式

文章插图
Reactor 及三种版本 对应设计大图(网络上到处都有 直接拿来用哈哈)

文章插图

文章插图

文章插图

文章插图

文章插图
【浅谈 Netty三种 I/O 模式和Reactor 编程模式】
推荐阅读
- 男士职场穿搭夏天,身为上班族男性应具备的三种颜色的衬衫是?
- 用Netty实现Http服务器
- 红茶有三分别是哪三种,野生红茶的种类
- 浅谈藏族天葬的殡葬习俗
- 浅谈ARP地址解析协议
- 基于netty手写Tomcat
- DES/3DES/AES 三种对称加密算法实现
- 浅谈 React 中的 XSS 攻击
- 什么色属于金 那三种颜色称黄金三色
- 苦丁茶哪三种人不能喝,喝苦丁茶的好处
