解释"领导者/追随者"模式

Ale*_*x B 39 concurrency design-patterns

我似乎无法找到"领导/追随者"模式的良好和可访问的解释.所有解释或者只是在某些问题的背景下引用它,或者完全没有意义.

任何人都可以给解释机制的这种模式是如何工作的,以及为什么以及如何改进了更传统的异步IO模型的性能?图表的示例和链接也很受欢迎.

Bál*_*dor 69

您可能已经阅读过,该模式由4个组件组成:ThreadPool,HandleSet,Handle,ConcreteEventHandler(实现EventHandler接口).

你可以把它想象成一个出租车站,晚上所有司机都在睡觉,除了一个,领导者.ThreadPool是一个管理许多线程的工作站 - 出租车.

领导者正在等待HandleSet上的IO事件,就像驱动程序如何等待客户端一样.

当客户到达时(以识别IO事件的句柄的形式),领导者司机唤醒另一个司机成为下一个领导者并且服务于他的乘客的请求.

当他将客户带到指定的地址(称为ConcreteEventHandler并将Handle移交给它)时,下一位领导可以同时为另一名乘客提供服务.

当司机完成后,如果车站不空,他会将出租车带回车站并入睡.否则他就成了领导者.

这种模式的优点是:

  • 不需要线程之间的通信,不需要同步,也不需要共享内存(无锁,互斥).
  • 可以添加更多ConcreteEventHandlers而不会影响任何其他EventHandler
  • 由于多个线程,最小化延迟

缺点是:

  • 复杂
  • 网络IO可能是一个瓶颈

  • 你说:"线程之间没有必要进行通信".事实并非如此,线程之间存在通信:有下一个线程的切换,还有一个需要同步的等待线程池. (10认同)
  • +1非常好的描述.thead - cab driver,threadpool - station,event - client,... (5认同)