1. 一般情况下,多线程计算服务,最简单的模式如下:


上面描述的过程 就是主线程发起工作请求,Work Threads 去主线程拿到工作请求,再进行计算;
这里存在对主线程的访问加锁问题;

2. 改进后的方案:

上面的多线程计算模式可以改进一下:如( CLR Thread Pool V4中采用的方案)
每个线程上再开一个队列:

上面的过程就是有任务就先往Global Queue里放,然后,再分发到工作线程中,这个过程不需要加锁,直接分配任务,当新的工作请求过来时,就直接加到Worker Thread 1的队列里等待处理;

但是上面的有一个问题,如果Worker Thread 2 完成了Task1的情况下,他的下一个工作任务如何获取呢?

请看上图,先从其它Worker Thread的队列中Stealing一个工作任务过来;

特别注意一个优化策略,就是如果 Worker Thread1 当前正在计算的任务如果触发了新的任务,这个时候,任务的请求是直接加到Worker Thread1 的工作队列的底部,优先等待被调度; (这个是对性能优化是有好处的,相关的数据应该都还在CPU的高速缓冲区中存在);

3. 无锁化的线程池的原理

将共享工作队列加以拆分成每工作线程一个工作队列的方式。对于主线程放入工作和工作线程取出任务的竞争问题,可以采取环形队列的方式避免,计算任务的触发采用条件变理及信号,而任务调度需要采用合适的调度算法:如 Round-Robin和Least-Load算法, Round-Robin即轮询式地分配工作,Least-Load即选择当前具有最少工作的工作者线程放入;

任务环形队列:

上面的算法过程就是不停的移动Out指针,去追敢In 指针的位置,不需要加锁;

参考:
http://www.danielmoth.com/Blog/New-And-Improved-CLR-4-Thread-Pool-Engine.aspx
https://blog.csdn.net/xhjcehust/article/details/45844901

Work Stealing 的运作原理相关推荐

  1. 主机主浏览服务器宣告的运作原理机制

    主机主浏览服务器宣告的运作原理机制.刚启动的电脑会在第1,第2,第4,第8 第12 分钟向主浏览器进行主机宣告,此后每间隔12分钟进行主机宣告! 问题一   请问如果第1分钟就已经注册成功了,那是不是 ...

  2. 【nodejs原理源码赏析(2)】KOA中间件的基本运作原理

    [摘要] KOA中间件的基本运作原理 示例代码托管在:http://www.github.com/dashnowords/blogs 在中间件系统的实现上,KOA中间件通过async/await来在不 ...

  3. 只是浅谈MS SQL Server的Page Splits运作原理

    一直以来,很多文章或书籍都会提到数据库在对数据做增删修都会因为数据异动导致Page Splits的产生. 一旦过度的分割就会提高所谓的逻辑片段,而要降低逻辑片段就得对数据表或索引做Rebuild或Re ...

  4. AI行为树的基础运作原理

    欢迎捉虫! 之前我研究了一下基于switch case语句的FSM状态机的使用,后来遇到了很多问题. 比如当角色的行为很多时,代码结构相当混乱(你需要考虑每一种状态之间的联系). 所以,当角色的行为愈 ...

  5. 【WPS-OFFICE-Word】 WPS中样式的运作原理?样式自动更新、自动改变如何处理?样式的管理方法?

    一.WPS中样式的运作原理 文档中的每一个文字或者段落,它的格式取决于两点--样式以及自定义修改. 比如内容A基于样式1,样式1的字体格式是五号宋体.段落格式是1.5倍行距: 我们在样式1的基础上,从 ...

  6. 物流供应链系统运作原理,物流供应链管理系统优化布局

    物流供应链系统管理优化对于物流行业企业而言有重要意义,以前的观点是生产促进产业增值,现在随着消费行为多样性.消费种类多样化,在商品通过物流配送中实现安全.稳定.可控的成功交付.管理过程中,也是属于实现 ...

  7. PHP session的运作原理解析

    今天主要介绍关于PHP session的运作原理解析,内容当中有详细资料跟代码实例相结合,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本文主要介绍了 php语言,其他语言的操作可 ...

  8. UG模具设计:强复位的作用及运作原理

    UG模具设计:强复位的作用及运作原理 在后模滑块成型胶位底部有顶针.斜顶的情况下,合模时常因为滑块的复位先于顶针的复位,从而导致滑块与顶针或者斜顶相撞的恶性事件,为此,在模具上必须设置先复位机构以确保 ...

  9. 大脑是如何记忆的?大脑记忆工作的构成和运作原理

    我们每个人每天都会接收一些信息,同时我们还会忘掉一些东西,但我们很少去了解我们大脑为什么会这样处理?所以我们深入的探究一下大脑记忆是如何工作的?了解一下大脑记忆的构成和运作原理? 我们先看记忆是什么. ...

  10. 同一个网络下两台设备看直播时,进度不是一致的?浅谈其运作原理

     目录 ​编辑 前言 开篇 概念补充 直播原理 真实场景 总结 前言 大家好哇!我是爷爷的茶七里香,发现一个很有意思的现象,想必大家也遇到过,我是在跟朋友同时看LOL总决赛直播的时候发现的,当时我跟他 ...

最新文章

  1. 18春《c语言》在线作业3,18春福师《C++语言程序设计》在线作业二【参考答案】...
  2. 机器阅读理解 / 知识库 / 深度学习 / 对话系统 / 神经机器翻译 | 本周值得读
  3. Python对图像的基本操作
  4. GOOD MEETINGS CREATE SHARED UNDERSTANDING, NOT BRDS!
  5. 【HDU - 1546】 Idiomatic Phrases Game(Dijkstra,可选map处理字符串)
  6. 【Python】Matplotlib绘制极坐标螺旋线图
  7. 如何把winform图片背景换成透明颜色_如何用photoshop更换图片背景颜色?
  8. 【java】详解java多线程
  9. 题解 P3978 【[TJOI2015]概率论】
  10. 解决numpy报错UFuncTypeError: Cannot cast ufunc ‘add‘ output from dtype(‘x‘) to dtype(‘x‘)
  11. 进程与服务的签名_服务器被黑客攻击后如何查找溯源攻击
  12. stixel_world+Multi_stioxel_world+semantic_stixel_world知识拓展
  13. Python心得基础篇【7】面向对象进阶篇
  14. 基于PHP的学生选课管理系统
  15. Zoom会议使用指南
  16. redisclient工具个人理解
  17. xe android 摄像头,玩就要出彩 佳明VIRB XE运动摄像机评测
  18. 华为云服务器快速迁移方案(最多十几分钟)
  19. 订单中心探索业务系统数据预置助力快交付之路
  20. csp试题2:公共钥匙盒

热门文章

  1. Jmail的使用方法
  2. java图片无损压缩_java无损压缩Thumbnailator(google)
  3. BugKuCTF中套路满满的题--------网站被黑了
  4. 实现手机扫描二维码进行登录
  5. Android 手势导航(Launcher3 部分)
  6. FL Studio混合器之效果器插槽部分讲解
  7. 软件工程第二次作业——git的使用
  8. Linux文件帮助_重定向_vi
  9. 连接局域网内的oracle
  10. CADD课程学习(13)-- 研究蛋白小分子动态相互作用-II(水中的溶菌酶 GROMACS)