# DynamicThreadPool **Repository Path**: zlzelu/dynamic-thread-pool ## Basic Information - **Project Name**: DynamicThreadPool - **Description**: 本项目是一个基于 C++11 及以上标准 的高性能、高可配置性的动态线程池实现,适用于 CPU 密集型、I/O 密集型 及 混合型 任务场景。 线程池具备 动态扩缩容、优先级调度、延时任务执行、对象池复用 等高级特性,适用于 高并发、低延迟 的任务调度场景。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-08-06 - **Last Updated**: 2025-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: 动态线程池 ## README # 动态线程池 Dynamic Thread Pool ## 📌 项目简介 本项目是一个基于 **C++11 及以上标准** 的高性能、高可配置性的动态线程池实现,适用于 **CPU 密集型**、**I/O 密集型** 及 **混合型** 任务场景。 线程池具备 **动态扩缩容、优先级调度、延时任务执行、对象池复用** 等高级特性,适用于 **高并发、低延迟** 的任务调度场景。 --- ## 🚀 主要功能 ### 🧠 智能动态线程调整 - 根据任务负载 **动态调整线程数量**,避免资源浪费或任务堆积。 - 提供四种线程池类型:`STATIC`(静态)、`CPU`(CPU 密集型)、`IO`(I/O 密集型)、`MIXED`(混合型),除静态类型外,自动计算最优线程数。 - 使用 **指数滑动平均(EMA)** 统计任务执行时间,平滑预测负载,实现更精准的弹性扩缩容。 ### ⏰ 支持延时任务与优先级调度 - 内置 **双队列机制**:优先级队列(实时任务)和时间队列(延时任务)。 - 任务支持 **优先级(5级)** 和 **延迟执行(秒级精度)**。 - 独立调度线程监控延时任务,确保 **准时触发**。 ### ♻️ 高效内存管理 - 使用 **对象池(Object Pool)** 管理任务对象,减少频繁内存分配开销。 - 结合 `thread_local` 缓存,进一步降低锁竞争和对象创建开销。 ### 🔧 任务生命周期管理 - 每个任务分配唯一 **ID**,支持通过 ID **查询状态或取消任务**。 - 任务状态机清晰(等待、执行中、已完成),便于监控和调试。 ### 🧩 高度可配置 - 支持自定义 **核心线程数、最大线程数、队列长度、检查间隔** 等参数。 - 提供 **平滑系数、扩容步长** 等调优参数,适应不同业务场景。 ### 🧪 线程安全与优雅退出 - **细粒度锁设计**,减少竞争。 - 支持 **优雅关闭**,确保所有任务执行完毕或安全取消后再析构。 ### ⚡ 性能优势 - **低延迟**:对象池 + 本地缓存大幅减少内存分配开销。 - **高吞吐**:动态扩缩容机制确保在高负载下仍能快速响应。 - **资源友好**:空闲线程自动挂起,减少 CPU 占用。 - **可观测性强**:内置日志输出线程池关键指标,便于监控和调优。 --- ## 📂 模块说明 - `base.h`:定义基础类型和宏,简化代码书写。 - `object.h`:包含定时器类的定义。 - `task.h`:任务相关类或结构的定义。 - `threadPool.h`:线程池核心逻辑,包括线程调度、线程创建、任务分发等功能。 - `test1.cpp`:主函数入口,用于测试线程池功能。 --- ## ⚙️ 使用方法 ### 1️⃣ 编译项目 确保安装 C++ 编译器(如 g++),使用如下命令编译: ```bash g++ -std=c++11 -pthread test1.cpp -o thread_pool_test ```` ### 2️⃣ 运行测试 ```bash ./thread_pool_test ``` ### 3️⃣ 测试内容 `test1.cpp` 中的 `main()` 函数将初始化线程池并提交任务,观察输出以验证线程池功能。 --- ## 📘 基本使用 ### 🔹 构造线程池 ```cpp // 静态类型的线程池构造 threadPool(c_int coreThreadNumber, c_int maxThreadNumber, c_double checkTime, const_ll maxTask, c_int logChoice = 3); // 其他类型的线程池构造 threadPool(c_uint8_t type, c_double checkTime, const_ll maxTask, c_int logChoice = 3); ``` 线程池支持 **静态线程池** 和 **动态线程池**: * **静态线程池**:声明对象时,需给出核心线程数、最大线程数、调度线程检查时间、任务队列最大长度、日志选项。 * **动态线程池**:声明对象时,给出线程池类型、调度线程检查时间、任务队列最大长度、日志选项,线程池会根据类型与运行环境自动设置参数。 支持的类型: ```cpp CPU, // CPU 密集型(大量计算,无 IO 等待) IO, // IO 密集型(如 HTTP、文件读取) MIXED, // 混合型 STATIC // 静态线程池(线程不发生动态变化) ``` --- ### 🔹 提交任务 ```cpp std::pair::value, std::future>::type> submit(c_int ex_time, c_uint8_t priority, Fun&& fun, Args&&... args); ``` 参数: * `ex_time`:任务执行时间 * `priority`:任务优先级 * `fun`:任务主体(函数指针、Lambda 等) * `args...`:任务参数 返回值: * `std::pair>` * 可通过 **任务 ID** 查询任务,也可通过 **future** 获取执行结果。 --- ### 🔹 取消任务 ```cpp bool erase(c_uint64_t& id); ``` 通过 **任务 ID** 可取消未执行的任务。 --- ## 📊 后续规划 * 监控模块:支持网络接口,实时在网页/客户端上对线程池进行可视化监控与调整。 --- ## 👨‍💻 开发者 * 作者:**zlzelu** * 项目地址:[Gitee](https://gitee.com/zlzelu/dynamic-thread-pool) --- ## 📄 许可证 本项目采用 **MIT License**,请查看 [LICENSE](LICENSE) 文件了解更多细节。