ThreadPool
A header-only C++11 thread pool based on stack-allocated task containers
Install / Use
/learn @HSLL175848494/ThreadPoolREADME
HSLL::ThreadPool
概述
一个仅需头文件的C++11轻量级线程池,无第三方依赖。通过栈预分配避免动态内存分配,支持任务的双端插入与多种提交方式,并采用任务窃取等机制实现智能负载均衡。
引入
//确保basic文件夹在其的同级目录
#include "ThreadPool.hpp"
任务提交接口
| 方法类型 | 非阻塞 | 阻塞等待(无限等待) | 超时等待(for) | 超时等待(until) |
|---------------|------------------|----------------------|--------------------------|---------------------------|
| 单任务提交 | submit | wait_submit | wait_submit_for | wait_submit_until |
| 批量任务提交 | submit_bulk | wait_submit_bulk | wait_submit_bulk_for | wait_submit_bulk_until |
基本使用
#include "ThreadPool.hpp"
using namespace HSLL;
using ContainerType = TaskStack<64,8>;//最大容量为64字节,最大对齐值为8的任务容器
void Func(int a, double b) { /*...*/ }
int main()
{
//创建线程池实例,任务容器使用Type类型
ThreadPool<ContainerType> pool;
// 初始化线程池: 队列容量1000,线程数4,批处理大小为1(default)
pool.init(1000,4);
//添加任务_基本示例
ContainerType task(Func, 42, 3.14);
pool.submit(task);
//也可以直接传入参数进行就地构造
pool.submit(Func, 42, 3.14);
//线程池析构时自动调用exit(false), 但仍然建议手动调用以控制退出行为
pool.shutdown(true); // 优雅关闭。调用后可通过init重新初始化队列
return 0;
}
更多用法参考example:异步任务/可取消任务/批量任务/智能存储/属性静态检查
任务生命周期
graph TD
A[任务提交] --> B{提交方式}
B -->|submit/submit_bulk| C[将任务对象移动到队列中]
C --> D[以移动的形式取出任务]
D --> E[执行execute方法]
E --> F[显式调用析构函数]
F --> G[清理执行内存]
参数传递过程
graph LR
A[构造任务] --> B[参数传递方式]
B --> C{左值参数}
B --> D{右值参数}
C --> E[拷贝到任务容器]
D --> F[移动到任务容器]
H[执行任务] --> I[容器中存储的参数以左值引用方式传递]
E --> H
F --> H
I --> J[函数调用]
J --> K{传参类型}
K --> L[值类型 T]
K --> M[左值引用 T&]
K --> N[const 引用 const T&]
K --> O[不支持:右值引用 T&& ]:::unsupported
classDef unsupported fill:#f10,stroke:#333
注意事项
- 类型匹配:提交任务类型必须严格匹配队列任务类型
- 异常安全:
- 任何入队列行为不允许抛出异常
- 需要保证任务(拷贝/移动构造)不抛出异常
- execute()方法不允许抛出异常,需要在任务内部捕获并处理所有可能的异常
不同于申请在堆上的任务,栈上任务的拷贝可能发生异常。由于异步执行的栈上任务无法 将异常传播到调用者,严格的异常保证是出于将任务存储在栈上的必要妥协
平台支持
- Windows 系统
- 类 Unix 系统
编译要求
- 需支持 C++11 或更新标准的编译器
项目结构
- document--------------------组件文档
- example---------------------使用示例
- include---------------------包含目录
- perf_test-------------------性能测试
- single_header_version-------单头文件版本
- README.md-------------------中文项目说明
- README.en.md----------------英文项目说明
