固定大小的工作线程池
More...
#include <sttnet.h>
固定大小的工作线程池
WorkerPool 内部维护一个任务队列和若干工作线程。 每个工作线程循环从队列中取出任务并执行。
特性
- 固定线程数量
- 线程安全的任务提交
- 支持优雅停止(graceful shutdown)
线程安全说明
使用示例
pool.submit([] {
});
pool.stop();
WorkerPool(size_t n, size_t maxPendingTasks=65536)
构造函数,创建指定数量的工作线程
Definition sttnet.h:5116
◆ WorkerPool()
| stt::system::WorkerPool::WorkerPool |
( |
size_t | n, |
|
|
size_t | maxPendingTasks = 65536 ) |
|
inlineexplicit |
构造函数,创建指定数量的工作线程
- Parameters
-
| n | 工作线程数量,必须至少为 1,否则抛出 std::invalid_argument。 |
| maxPendingTasks | 尚未开始执行的任务上限;达到上限时 submit() 返回 false,默认 65536。 |
构造完成后,所有线程立即启动并进入等待状态。
◆ ~WorkerPool()
| stt::system::WorkerPool::~WorkerPool |
( |
| ) |
|
|
inline |
析构函数
析构时会自动调用 stop(), 确保所有线程退出并被正确 join。
◆ maxPendingTasks()
| size_t stt::system::WorkerPool::maxPendingTasks |
( |
| ) |
const |
|
inlinenoexcept |
◆ peakPendingTasks()
| size_t stt::system::WorkerPool::peakPendingTasks |
( |
| ) |
const |
|
inlinenoexcept |
◆ pendingTasks()
| size_t stt::system::WorkerPool::pendingTasks |
( |
| ) |
const |
|
inline |
◆ stop()
| void stt::system::WorkerPool::stop |
( |
const bool | drain = true | ) |
|
|
inline |
停止线程池并等待所有线程退出
- Parameters
-
| drain | true:执行完已排队任务;false:丢弃尚未开始的任务,仅等待正在执行的任务返回。 |
调用后:
- 不应再提交新的任务
- drain=true 时执行完已排队任务;drain=false 时丢弃尚未开始的任务
- 所有工作线程都会退出并 join
该函数可安全重复调用。
◆ submit()
| bool stt::system::WorkerPool::submit |
( |
Task | task | ) |
|
|
inline |
向线程池提交一个任务
- Parameters
-
- Returns
- true:任务已提交;false:线程池已停止或等待队列已满,任务未入队。
- Note
- 已接受的任务会在 stop() 返回前执行完;任务抛出的异常被线程池边界捕获,不会杀死工作线程。
The documentation for this class was generated from the following file: