ZLToolKit 源码分析(三):ThreadPool 线程池核心实现
2026/6/2 21:19:59 网站建设 项目流程

ThreadPool 是 ZLToolKit 的线程管理核心,基于生产者-消费者模型实现任务队列调度。本文深入分析其任务入队、线程获取、负载均衡和优雅退出机制。

1. 类继承关系

TaskExecutorInterface (纯虚接口) └─ TaskExecutor (加入 CPU 负载计算) └─ ThreadPool (线程池实现) └─ EventPoller (IO 事件轮询器,后续文章分析)

2. TaskExecutorInterface — 抽象接口

classTaskExecutorInterface{public:virtual~TaskExecutorInterface()=default;// 异步投递任务virtualTask::Ptrasync(TaskInCB&&task,boolmay_sync=true)=0;// 同步执行任务(阻塞等待完成)virtualvoidsync(constfunction<void()>&task){semaphore sem;async([&](){task();sem.post();},false);sem.wait();}// 延时执行任务virtualDelayTask::PtrdoDelayTask(uint64_tdelay_ms,function<uint64_t()>&&task)=0;};

sync 实现巧妙:用 semaphore 将异步任务转为同步等待——投递任务后sem.wait()阻塞,任务执行完sem.post()唤醒。

3. TaskExecutor — 任务执行器

classTaskExecutor:publicThreadLoadCounter,publicTaskExecutorInterface{public:usingPtr=std::shared_ptr<TaskExecutor>;// 获取 CPU 负载floatonLoad()const{returnThreadLoadCounter::onLoad();}// 获取当前线程的任务执行器staticTaskExecutor*getCurrentTaskExecutor();private:// 线程局部存储staticthread_localTaskExecutor*s_current_task_executor;};

thread_local保存当前线程的任务执行器指针,使任意代码可以getCurrentTaskExecutor()获取所属执行器——这是线程归属机制的底层支撑。

4. ThreadPool — 线程池核心

4.1 核心数据成员

classThreadPool:publicTaskExecutor{

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询