关于netty:Netty网络编程Reactor模式高性能架构设计原理

5次阅读

共计 1741 个字符,预计需要花费 5 分钟才能阅读完成。

1. 传统 I / O 模型

2.Reactor 模式

3. 单 Reactor 单线程

4. 单 Reactor 多线程

5. 主从 Reactor 多线程

6.Reactor 模式特点总结

不同的线程模式对于性能有微小的影响,为了后续更好地发展 Netty 的线程模式,咱们先来看下各种线程模式的原理和区别,最初进行比照。

1. 传统 I / O 模型

1.1)工作原理图:

1.2)模型特点:
传统 I / O 模型也就是 BIO 模型,这在咱们后面曾经介绍过。Netty 网络编程——Netty 的根本介绍与 BIO,它的毛病有:

1)每个申请都要创立线程,浪费资源。

2)连贯建设后,如果服务端的数据还没有筹备好,则服务端线程不会去解决别的申请,会 阻塞,造成资源节约。

2.Reactor 模式
针对传统 I / O 模型的毛病,咱们有 如下的解决方案:

1)基于多路复用,一个线程解决多个客户端连贯。

2)业务逻辑解决线程基于线程池,一个线程能够解决多个连贯的业务。

Reactor 模式原理图:

咱们从图中能够得出,

1)服务器端程序处理传进来的多个申请,并将他们分派给对应的解决线程,咱们称之为 Reactor(反应堆)模式。
2)Reactor 采纳 IO 多路复用,一个 Handler 解决多个客户端连贯,解决线程结束后,会通过 Handler 返回对应的客户端。

咱们能够得出 Reactor 里有 两个角色
ServiceHandler: 负责监听和散发事件,分发给适当的线程来对业务逻辑进行解决。

EventHandler:解决申请的理论线程。

Reactor 模式还分为三种:
单 Reactor 单线程 单 Reactor 多线程,主从 Reactor 多线程,咱们来顺次进行解说。

3. 单 Reactor 单线程
原理图:

解决逻辑:
1)当有 client 申请的时候,咱们 通过 select 进行 I / O 多路复用解决申请
2)Reactor 通过 select 监听客户端事件, 通过 dispatch 来转发申请
3) 如果是建设连贯的申请 ,咱们应用 Acceptor 通过 accept 解决申请。
4) 如果是不是建设连贯申请 ,Reactor 则会 调用对应的 Handler 解决

总结:
服务器端用一个线程实现所有客户端的 IO 操作,模型简略易懂。

优缺点剖析:
长处:
1)简略,没有线程竞争,全副都由一个线程实现。

毛病:
1)性能不佳 ,一个线程要解决这么多申请,当 Handler 正在进行 I / O 密集型的操作时,整个 Reactor 无奈解决其它事件。
2) 高度耦合性,导致线程出现异常的时候,会导致整个模块不可用。

4. 单 Reactor 多线程

原理图:

解决逻辑:

1)通过 Reactor 中的 select 解决所有连贯申请
2)通过 Reactor 中的dispatch 来散发申请
3)通过Acceptor 来解决连贯
4)通过 不同的 handler 来解决不同的解决申请,然而不做具体解决,而是通过 send 发送给线程池。
5)worker 线程业务处理完毕后,将后果返回 handler。

优缺点剖析:

长处 :相比单线程模式, 更能施展 cpu 的能力

毛病 建设连贯的线程还是只有一个,在连接数多的状况下,容易呈现瓶颈。

5. 主从 Reactor 多线程

针对单 Reactor 中的连接数过大造成的瓶颈,能够让 Reactor 在多线程中进行运行。

原理图:

解决逻辑:
1)MainReactor 主线程通过 select 解决多个连贯申请,以及解决建设连贯的逻辑。
2)MainReactor承受到处理事件后 ,把 事件分发给 Reactor 子线程。
3)SubReactor 将 连贯退出到连贯队列进行监听,并依据事件创立不同的 handler
4)handler 将对应的事件分发给 worker 线程进行解决
5)返回后果
6)Reactor 主线程能够对应多个 Reactor 子线程

优缺点剖析

长处
1) 父子线程职责明确 ,父线程只须要建设连贯,子线程解决业务逻辑
2) 父子线程只须要进行转发即可,交互简略。

毛病
1) 编程复杂度高

6.Reactor 模式特点总结

1)响应快 ,不用为某个长时间解决的业务进行阻塞期待。
2) 分工明确 ,各自的线程解决各自的逻辑,繁多职责。
3) 扩展性好 ,主须要减少不同的 Handler 就能够解决不同的工作,还不必批改原来的代码。
4) 复用性好 ,Reactor 与具体的逻辑无关,具备很高的复用性。
5) 防止简单的多线程的切换开销

正文完
 0