希望大佬们帮忙review代码,一个workstealing线程池
-
希望大佬们帮忙review代码,一个workstealing线程池,文档没有很全面,也请指点,文档后续会补充
https://github.com/utsusemioxo/MyWorkStealingPool -
大概看了一下, 现在的设计直观上会感觉threadpool和workthread有点太多的双向依赖了(但有可能是必须的)
- threadpool持有workthread队列向量
- 而每个workthread又都持有threadpool的指针来访问放到pool中的各种local-vector
从代码实现上看, workthread需要通过分配index来保证并发访问各种local-vector
不知道有没有可能把 一些local的东西优化到workthread中, 把local资源暴露范围缩小, 避免每个workthread都直接持有并能访问/控制所有threadpool的资源。任务窃取尝试交给 threadpool 来做(这样会影响窃取性能吗? 单独有个shuffle线程呢?...)
例如workthread的api设计
class WorkerThread { public: addTask(x) wake() private: send_steal_req() ... private: xx local_task_queue; xx local_mutex; xx local_cond; ... };
而对于threadpool
- 能不能有个线程安全的环形队列-GlobalTaskQ?
- 增加任务调度(分发)器?
- 记录steal_req的tick值 优先队列 优先级玩法? 防止部分线程过度饥饿 均摊任务?
- ...
上面的思路是不是能有效缩小锁的暴露范围, 并减少依赖。同时可以让锁作用域粒度更小? 会不会影响性能? 可能需要测试
-
@sunrisepeak 全局队列或许也可以用CAS优化