知识卡片
线程池与工作队列的解耦设计
内容
ThreadPool 本身不知道要处理什么任务,只持有一组工作线程和一个 WorkQueue 列表;具体的任务容器、入队/出队逻辑、处理函数都由调用方继承 WorkQueue 自行实现(_enqueue/_dequeue/_process 是纯虚函数)。一个线程池可以同时挂多个工作队列,工作线程从上次访问的队列开始轮询取任务处理。这种设计把”线程怎么调度”和”任务是什么、怎么处理”彻底解耦:紧急、高频的任务类型独享线程池,不紧急的后台任务可以合并挂到同一个线程池共享资源,调度策略不需要为每种任务类型重新实现。
参考来源
《Ceph源码分析》第2章《Ceph通用模块》