STTNet 0.7.0
载入中...
搜索中...
未找到
stt::system::WorkerPool类 参考

固定大小的工作线程池 更多...

#include <sttnet.h>

Public 成员函数

 WorkerPool (size_t n, size_t maxPendingTasks=65536)
 构造函数,创建指定数量的工作线程
 
 ~WorkerPool ()
 析构函数
 
bool submit (Task task)
 向线程池提交一个任务
 
void stop (const bool drain=true)
 停止线程池并等待所有线程退出
 
size_t pendingTasks () const
 返回当前等待执行的任务数(瞬时快照)。
 
size_t maxPendingTasks () const noexcept
 返回等待任务队列容量。
 
size_t peakPendingTasks () const noexcept
 返回等待任务数的历史峰值。
 

详细描述

固定大小的工作线程池

WorkerPool 内部维护一个任务队列和若干工作线程。 每个工作线程循环从队列中取出任务并执行。

特性

  • 固定线程数量
  • 线程安全的任务提交
  • 支持优雅停止(graceful shutdown)

线程安全说明

使用示例

WorkerPool pool(4);
pool.submit([] {
// 执行任务
});
pool.stop();
WorkerPool(size_t n, size_t maxPendingTasks=65536)
构造函数,创建指定数量的工作线程
定义 sttnet.h:5116

构造及析构函数说明

◆ WorkerPool()

stt::system::WorkerPool::WorkerPool ( size_t n,
size_t maxPendingTasks = 65536 )
inlineexplicit

构造函数,创建指定数量的工作线程

参数
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

停止线程池并等待所有线程退出

参数
draintrue:执行完已排队任务;false:丢弃尚未开始的任务,仅等待正在执行的任务返回。

调用后:

  • 不应再提交新的任务
  • drain=true 时执行完已排队任务;drain=false 时丢弃尚未开始的任务
  • 所有工作线程都会退出并 join

该函数可安全重复调用。

◆ submit()

bool stt::system::WorkerPool::submit ( Task task)
inline

向线程池提交一个任务

参数
task可调用对象,函数签名为 void()
返回
true:任务已提交;false:线程池已停止或等待队列已满,任务未入队。
注解
已接受的任务会在 stop() 返回前执行完;任务抛出的异常被线程池边界捕获,不会杀死工作线程。

该类的文档由以下文件生成: