美文网首页
高性能网络I/O模型之Reactor和Proactor

高性能网络I/O模型之Reactor和Proactor

作者: 我有一只喵喵 | 来源:发表于2021-04-14 10:09 被阅读0次

Reactor(反应器模式、分发器模式)

非阻塞同步网络模型。基于I/O多路复用结合线程池复用,多个连接公用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需轮询阻塞等待所有连接,常见的实现方式有select,epoll,kqueue等;当某个连接有新的数据可以处理时,操作系统通知应用程序使得线程从阻塞状态返回,然后分派到相应的处理线程开始进行业务处理。

Reactor模式中有两大核心组成:ReactorHandlers

  • Reactor
    在单独一个线程中运行,负责监听和分发事件
  • Handlers
    处理程序执行I/O事件要完成的实际事件
image.png

单Reactor单线程模型

Reactor对象通过select监控连接事件,收到事件之后通过dispatch进行分发;如果是连接建立事件,交给Acceptor处理,Acceptor通过accept接收连接,然后创建一个Handler处理该连接后续的各种事件。如果不是连接建立事件,则Reactor调用连接对应Handler响应,Handler会完成read->业务处理-->send的完整流程。

单Reactor单线程

优缺点:
1)模型简单、没有多线程、进程通信、竞争问题。
2)只有一个线程,无法发挥多核CPU性能,容易产生性能瓶颈
3)可靠性低,如果线程意外终止,或者进入死循环, 会导致整个系统通信模块不可用。
4)Handler在处理某个连接的业务时,其他连接的事件无法被处理

使用场景:
仅适用于客户端数量有限,业务处理非常快速的场景,比如redis。

单Reactor多线程模型

为了解决单Reactor单线程的缺点,引入了单Reactor多线程模型。

在主线程中,Reactor对象通过select监控连接事件,收到事件之后通过dispatch进行分发;如果是连接建立事件,交给Acceptor处理,Acceptor通过accept接受连接,并为其创建一个Handler来处理后续的各种事件。如果不是连接建立事件,则Reactor调用连接对应的Handler来响应,其中Handler只负责响应事件,不进行业务处理,Handler通过read读取到数据后,然后传递给Worker交给线程池取执行,Worker执行过完之后将响应结果发给主线程的Handler处理,Handler再将响应结果通过send**发送给客户端。

单Reactor多线程

优缺点:
1)充分发挥利用多核CPU处理能力,提升性能
2)多线程数据共享和访问的处理比较复杂,reactor在单线程中处理所有的事件监听和响应,在高并发场景下容易产生性能瓶颈
3)Reactor承担所有事件的监听和响应,只在主线程这个单线程中运行,瞬间高并发会使其成为性能瓶颈。

主从Reactor多线程模型

Reactor主线程通过select监听连接事件,收到事件后通过Acceptor处理连接事件,当Acceptor处理连接事件后,主Reactor将连接分配给某个子线程的SubReactor,subReactor将连接加入监听队列中,并创建handler进行各种事件的处理,当有新事件发生,subReactor调用对应handler处理,handler读取数据完之后通过交给worker线程池进行处理。

主从Reactor多线程模型

优缺点:
1)父线程与子线程数据交互简单、职责明确,父线程只负责接收新连接,子线程完成后续业务处理。
2)编程复杂度高

著名开源系统Nginx采用的就是主从Reactor多进程模型,Memcache和Netty采用Reactor多线程模型。

Proactor

非阻塞异步网络模型。Proactor核心思想就是,当来了事件,由操作系统进行处理(即从硬件读取到内核以及内核读取到用户态),处理完之后通知应用程序。

整个Proactor方案为在我们应用程序中有一个Proactor Initiator负责Proactor和Handler,并将Proactor和Handler通过Asynchronous Operation Processor注册到内核。Asynchronous Operation Processor负责处理注册请求,完成I/O操作,当其完成I/O的操作后,通知Proactor,Proactor根据不同事件类型回调不同的Handler进行业务处理。

Proactor模型

图片引用自:从0开始学架构

Reactor和Proactor区别

看到一个形象的解释:Reactor相当于到饭点了,保姆通知你去做饭;Proactor是到饭店了,你告诉保姆饭桌在哪,保姆做完饭放到饭桌上,然后通知你。

参考

相关文章

  • 彻底搞懂Reactor模型和Proactor模型

    在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步...

  • 高性能网络I/O模型之Reactor和Proactor

    Reactor(反应器模式、分发器模式) 非阻塞同步网络模型。基于I/O多路复用结合线程池复用,多个连接公用一个阻...

  • Proactor和Reactor模型

    随着网络设计模式的兴起,Reactor和Proactor事件处理模式应运而生。同步I/O模型通常用于实现React...

  • actor、reactor与proactor模型

    actor、reactor与proactor模型:高性能服务器的几种模型概念。 actor模型: 实体之通过消息通...

  • actor reactor proactor模型

    actor、reactor与proactor模型:高性能服务器的几种模型概念。 actor模型: 实体之通过消息通...

  • Proactor模式

    节选自:Linux高性能服务器编程 与Reactor模式不同,Proactor模式将所有I/O操作都交给主线程和内...

  • Reactor 模式

    【未完待续】 参考 两种高效的服务器设计模型:Reactor和Proactor模型reactor和proactor...

  • Netty入门笔记

    知识点:Reactor模式 一、Linux网络I/O模型简介 1.阻塞I/O模型:开始I/O操作时直到数据...

  • Netty浅析

    IO模型 IO多路复用模式:Reactor、Proactor NIO实现的是Reactor模式。通过select、...

  • Reactor和Proactor对比

    常见的IO事件处理模型有两种:Reactor和Proactor。Redis中的ae就是采用的Reactor事件处理...

网友评论

      本文标题:高性能网络I/O模型之Reactor和Proactor

      本文链接:https://www.haomeiwen.com/subject/dfdclltx.html