跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组
折叠
品牌标识

D2Learn Forums

  1. 主页
  2. General Discussion | 综合讨论
  3. 希望大佬们帮忙review代码,一个workstealing线程池

希望大佬们帮忙review代码,一个workstealing线程池

已定时 已固定 已锁定 已移动 General Discussion | 综合讨论
多线程
3 帖子 2 发布者 83 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • utsusemioxoU 离线
    utsusemioxoU 离线
    utsusemioxo
    写于 最后由 编辑
    #1

    希望大佬们帮忙review代码,一个workstealing线程池,文档没有很全面,也请指点,文档后续会补充
    https://github.com/utsusemioxo/MyWorkStealingPool

    1 条回复 最后回复
    0
    • sunrisepeakS 离线
      sunrisepeakS 离线
      sunrisepeak d2learn-dev
      写于 最后由 编辑
      #2

      大概看了一下, 现在的设计直观上会感觉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值 优先队列 优先级玩法? 防止部分线程过度饥饿 均摊任务?
      • ...

      上面的思路是不是能有效缩小锁的暴露范围, 并减少依赖。同时可以让锁作用域粒度更小? 会不会影响性能? 可能需要测试

      sunrisepeakS 1 条回复 最后回复
      0
      • sunrisepeakS 离线
        sunrisepeakS 离线
        sunrisepeak d2learn-dev
        在 回复了 sunrisepeak 最后由 编辑
        #3

        @sunrisepeak 全局队列或许也可以用CAS优化

        1 条回复 最后回复
        0

        • 登录

        • 没有帐号? 注册

        • 登录或注册以进行搜索。
        d2learn forums Powered by NodeBB
        • 第一个帖子
          最后一个帖子
        0
        • 版块
        • 最新
        • 标签
        • 热门
        • Online Tools
        • 用户
        • 群组