工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。
一个大任务分割为若干个互不依赖的子任务,为了减少线程间的竞争,把这些子任务分别放到不同的队列里,并未每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应。比如线程1负责处理1队列里的任务,2线程负责2队列的。但是有的线程会先把自己队列里的任务干完,而其他线程对应的队列里还有任务待处理。干完活的线程与其等着,不如帮其他线程干活,于是它就去其他线程的队列里窃取一个任务来执行。而在这时它们可能会访问同一个队列,所以为了减少窃取任务线程和被窃取任务线程之间的竞争,通常会使用双端队列,被窃取任务线程永远从双端队列的头部拿任务执行,而窃取任务线程永远从双端队列的尾部拿任务执行。

优点:充分利用线程进行并行计算,减少线程间的竞争。
缺点:在某些情况下还是会存在竞争,比如双端队列里只有一个任务时。并且该算法会消耗更多的系统资源, 比如创建多个线程和多个双端队列。

在Java中

  • 可以使用LinkedBlockingDeque来实现工作窃取算法
  • JDK1.7引入的Fork/Join框架就是基于工作窃取算法

工作窃取算法 work-stealing相关推荐

  1. 中fifo算法_java线程池,工作窃取算法

    前言 在上一篇<java线程池,Executors阿里开发规范中为什么禁止使用Executors?>中我们谈及了线程池,同时又发现一个现象,当最大线程数还没有满的时候耗时的任务全部堆积给了 ...

  2. ConcurrentHashMap 锁分段技术 结构 ConcurrentLinkedQueue 阻塞队列 Fork/Join框架 工作窃取算法

    文章目录 ConcurrentHashMap 锁分段技术 结构 ConcurrentLinkedQueue 阻塞队列 Fork/Join框架 工作窃取算法 ConcurrentHashMap 锁分段技 ...

  3. 什么是ForkJoin、ForkJoin分支合并、ForkJoin工作窃取、ForkJoin大数据求和计算

    什么是ForkJoin.ForkJoin分支合并.ForkJoin工作窃取.ForkJoin大数据求和计算 什么是ForkJoin? ForkJoin:分支合并 ForkJoin特点:工作窃取 如何让 ...

  4. java work stealing_Java线程池之WorkStealingPool,任务窃取算法

    1 import java.io.IOException; 2 import java.util.concurrent.ExecutorService; 3 import java.util.conc ...

  5. ForkJoin框架详解 一张图搞明白工作窃取(work-stealing)机制

    1 ForkJoin框架 1.1 ForkJoin框架 ForkJoinPool一种ExecutorService的实现,运行ForkJoinTask任务.ForkJoinPool区别于其它Execu ...

  6. 工作▍推荐系统算法工程师是搞啥的?工作内容、技能、面试题全解析

    推荐算法工程师就业指导 2016年,YouTube发表论文,将深度神经网络应用推荐系统中,实现了从大规模可选的推荐内容中找到最有可能的推荐结果. 近年来,推荐系统被广泛的应用于电子商务推荐.个性化广告 ...

  7. 操作系统应该如何在多CPU上调度工作?

    本章将介绍多处理器调度(multiprocessor scheduling)的基础知识.由于本章内容相对较深,建议认真学习并发相关的内容后再读. 过去很多年,多处理器(multiprocessor)系 ...

  8. 如何偷窃局域网其它电脑文件_偷窃工作

    如何偷窃局域网其它电脑文件 Before talking about Work Stealing, we need to talk about task management. We could us ...

  9. Fork/Join工作原理解析

    一.如何高效利用CPU 在介绍Fork/Join框架之前,思考一个问题,在多线程的情况下,如何才能高效的利用CPU,以常用的线程池为例,线程池的线程数设置多少合适? 通常调整线程池中的线程数量其核心目 ...

  10. 史上最全Java 8新特性总结,助你在工作事半功倍

    1.Lambda表达式 1.初体验 目标:了解使用匿名内部类存在的问题,体验Lambda 匿名内部类存在的问题:当需要启动一个线程去完成任务时,通常会通过Runnable 接口来定义任务内容,并使用T ...

最新文章

  1. pytorch lstm 写诗文的魔改,测试,猜想
  2. 报名 | 腾讯量子实验室发起Alchemy竞赛,推动分子性质的AI预测研发
  3. 2020年快手校招JAVA岗笔试第三题
  4. MySQL主从复制主库宕机:1更新完relaylog2最大post设为主库 配置及删除之前从库信息3其他从库新建连接
  5. mongodb $ifNull
  6. Spring Data JPA 从入门到精通~@EntityListeners注解示例
  7. R语言学习笔记(五)假设检验及其R实现
  8. 线程同步 -事件Event、临界区对象CriticalSection
  9. 洛谷P1069 细胞分裂 数学
  10. python visa模块_python – Mac OS X上的NI VISA pyVisa(Snow Leopard)
  11. 今日科技联播:全球区块链专利申请数超5000件,Coinplug第一阿里紧随其后
  12. 微信公众号(服务号)申请流程(仅供参考)
  13. Ramda.js 函数式编程 (==在angular中引入)
  14. excel 公式和函数
  15. 单元格内多个姓名拆分成一列_excel一个单元格中有多个名字,怎样拆分这些名字,名字是用空格分开的《excel批量分列》...
  16. python给excel添加超链接_《python3教程》 python用xlwt,超链接到另一sheet,如何设置HYPERLINK...
  17. 粒子滤波与重要性采样
  18. 【Win11共享打印机,win11家庭版中添加组策略】
  19. 轻量级图像分类模型-MobileNetV3阅读笔记
  20. 错过就要多花 200 元,Unite 2017 Shanghai 五折抢票倒计时!

热门文章

  1. IGame游戏公司的故事
  2. MYS-6ULX-IOT 开发板测评——支持 RTL8188 WiFi 模块
  3. 财务自由,整层楼沸腾!万亿蚂蚁IPO来了,诞生几千个亿万富翁?杭州、上海房价又要涨了…...
  4. CentOS 7校准时间–NTP
  5. 工程数学(经常用到的工程数学知识进行整理)
  6. APISpace 文本情感倾向分析API
  7. 第26课时,实践4,定期存款利息计算器
  8. 网站关键词优化工具,网站关键词排名优化工具免费
  9. ybc_art打印艺术字
  10. linux php 编程 pdf 百度云,Linux下的Perl编程 pdf版