<返回更多

浅谈 Netty三种 I/O 模式和Reactor 编程模式

2020-10-13    
加入收藏

Netty 怎么切换三种 I/O 模式

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

生活场景:

当我们去饭店吃饭时:

• 食堂排队打饭模式:排队在窗口,打好才走;

• 点单、等待被叫模式:等待被叫,好了自己去端;

• 包厢模式:点单后菜直接被端上桌。

 

• 阻塞与非阻塞

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

2) 阻塞:没有数据传过来时,读会阻塞直到有数据;缓冲区满时,写操作也会阻塞。

非阻塞遇到这些情况,都是直接返回。

 

• 同步与异步

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

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

 

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 

Netty 对三种 I/O 模式的支持如图

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 

为什么 Netty 有多种 NIO 实现

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

实现得更好!

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

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

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

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

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 

NIO 一定优于 BIO 么?

• BIO 代码简单。

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

Netty 如何支持三种 Reactor

什么是 Reactor 及三种版本?

生活场景:饭店规模变化

• 一个人包揽所有:迎宾、点菜、做饭、上菜、送客等;

• 多招几个伙计:大家一起做上面的事情;

• 进一步分工:搞一个或者多个人专门做迎宾。

 

1. 一个人包揽所有:迎宾、点菜、做饭、上菜、送客等 -> Reactor 单线程

2. 多招几个伙计:大家一起做上面的事情 -> Reactor 多线程模式

3. 进一步分工:搞一个或者多个人专门做迎宾 -> 主从 Reactor 多线程模式

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 

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

浅谈 Netty三种 I/O 模式和Reactor 编程模式

 


浅谈 Netty三种 I/O 模式和Reactor 编程模式

 


浅谈 Netty三种 I/O 模式和Reactor 编程模式

 


浅谈 Netty三种 I/O 模式和Reactor 编程模式

 


浅谈 Netty三种 I/O 模式和Reactor 编程模式
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>