Loading

高效并发模式--领导者/追随者模式

并发模式是指I/O处理单元和多个逻辑单元之间的协调完成任务的方法。

并发模式中,“同步”指的是程序完全按照代码序列的顺序执行;“异步”指的是程序的执行需要由系统事件来驱动。

领导者/追随者模式

领导者/追随者模式是多个工作线程轮流获得事件源集合,轮流监听、分发并处理事件的一种模式

领导者线程:在任意时间点,程序都仅有一个领导者线程。负责监听I/O事件。

追随者线程:当前时间点,除领导者线程之外的所有线程都是追随者,都休眠在线程池中等待成为新的领导者。

当前的领导者如果检测到I/O事件:

  1. 从线程池中推线新的领导者;
  2. 旧的领导者去处理I/O事件;
  3. 新的领导者等待新的I/O事件。
领导者-追随者模式.png

组件

领导者-追随者模式的组件.png
  • 句柄集(HandleSet)

    句柄(Handle)用于表示I/O资源,Linux下通常是文件描述符。句柄集管理从多句柄。

    • wait_for_event():监听句柄集中的所有句柄的I/O事件,并将就绪事件通知给领导者进程。
    • register_handle():绑定句柄和事件处理器。
    • unregister_handle():解绑句柄和事件处理器。
  • 线程集(ThreadSet)

    所有工作线程,包括领导者线程和追随者线程。线程集主要负责线程之间的同步,以及推选新的领导者。线程状态包括:

    领导者-追随者模式的状态转移.png
    • Leader:领导者身份,等待句柄集上的I/O事件。当检测到新的I/O事件,可以推选新的领导者,本线程转为Processing处理事件,也可能指定其他追溯者来处理事件;
    • Processing:正在处理事件;
    • Follower:追随者身份,等待成为新的领导者,也可能被当前领导者指定来处理新的任务。
  • 事件处理器(EventHandler)和具体事件处理器(ConcreteEventHandler)

    事件处理器通常包含一个或多个回调函数handle_event。这些回调函数用于处理事件对应的业务逻辑。

优势&缺陷

优势:

  1. 不需要在线程之间传递任何额外的数据(领导者自己监听I/O事件并处理请求);
  2. 线程之间无须同步队请求队列的访问(对比半同步/半反应堆模式)。

缺陷:

  1. 仅支持一个事件源集合
  2. 无法让每个工作线程独立地管理多个客户连接
posted @ 2021-01-25 14:45  JakeLin  阅读(385)  评论(0编辑  收藏  举报