【c++】【线程池】线程池模式
【c++】【线程池】线程池模式
1 L/F领导者与跟随者模式
- 概述:在此模式中,线程池中的线程分为:领导者(Leader),跟随者(Follower)和工作者(Processor)
- 领导者线程:负责监听和接收外部事件或请求,任何时刻线程池只有一个领导者线程。
- 跟随者线程:等待被提升为领导者。
- 工作者 :处理事件或请求,处理完成后将自身设置为跟随者。
- 工作流程:当有新的事件到来时,领导者(Leader)负责接收事件并分离事件,领导者(Leader)将自身设置为工作者(Processor)并从跟随者线程中选择一个提升为新的领导者,继续监听新的事件。工作者(Processor)线程处理该事件,处理完成后将自己转为跟随者状态。
2半同步/半异步模式
- 概述:该模式将线程池划分为三个层次:
- 同步服务层:负责处理 I/O 事件的监听和分发。
- 排队层:用于存放待处理的任务。
- 异步服务层:从队列中取出任务并进行处理。
- 工作流程:主线程(同步服务层)负责监听 I/O 事件,并将事件封装为任务放入同步队列。工作线程(异步服务层)从同步队列中取出任务并处理。
- ps:可以理解为两个活动过程
- 往同步队列中添加任务的过程–>理解为生产者
- 从同步队列中取出任务的过程–>理解为消费者
第一层是同步服务层, 处理来自User的任务请求, 上层的请求可能是并发的, 这些请求并不会马上被处理, 而是会被放入到第二层的同步队列中。
第二层的同步队列会调用第三层的异步服务层, 从而执行任务, 并且异步服务层会响应来自第二层的同步队列的请求, 从而保证任务的执行顺序。
第三层是异步服务层, 会有若干个线程同时处理排队层中的任务。
参考:https://blog.csdn.net/qq_51931826/article/details/145468543