工作窃取算法 work-stealing
工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。
一个大任务分割为若干个互不依赖的子任务,为了减少线程间的竞争,把这些子任务分别放到不同的队列里,并未每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应。比如线程1负责处理1队列里的任务,2线程负责2队列的。但是有的线程会先把自己队列里的任务干完,而其他线程对应的队列里还有任务待处理。干完活的线程与其等着,不如帮其他线程干活,于是它就去其他线程的队列里窃取一个任务来执行。而在这时它们可能会访问同一个队列,所以为了减少窃取任务线程和被窃取任务线程之间的竞争,通常会使用双端队列,被窃取任务线程永远从双端队列的头部拿任务执行,而窃取任务线程永远从双端队列的尾部拿任务执行。
优点:充分利用线程进行并行计算,减少线程间的竞争。
缺点:在某些情况下还是会存在竞争,比如双端队列里只有一个任务时。并且该算法会消耗更多的系统资源, 比如创建多个线程和多个双端队列。
在Java中:
- 可以使用LinkedBlockingDeque来实现工作窃取算法
- JDK1.7引入的Fork/Join框架就是基于工作窃取算法
工作窃取算法 work-stealing相关推荐
- 中fifo算法_java线程池,工作窃取算法
前言 在上一篇<java线程池,Executors阿里开发规范中为什么禁止使用Executors?>中我们谈及了线程池,同时又发现一个现象,当最大线程数还没有满的时候耗时的任务全部堆积给了 ...
- ConcurrentHashMap 锁分段技术 结构 ConcurrentLinkedQueue 阻塞队列 Fork/Join框架 工作窃取算法
文章目录 ConcurrentHashMap 锁分段技术 结构 ConcurrentLinkedQueue 阻塞队列 Fork/Join框架 工作窃取算法 ConcurrentHashMap 锁分段技 ...
- 什么是ForkJoin、ForkJoin分支合并、ForkJoin工作窃取、ForkJoin大数据求和计算
什么是ForkJoin.ForkJoin分支合并.ForkJoin工作窃取.ForkJoin大数据求和计算 什么是ForkJoin? ForkJoin:分支合并 ForkJoin特点:工作窃取 如何让 ...
- java work stealing_Java线程池之WorkStealingPool,任务窃取算法
1 import java.io.IOException; 2 import java.util.concurrent.ExecutorService; 3 import java.util.conc ...
- ForkJoin框架详解 一张图搞明白工作窃取(work-stealing)机制
1 ForkJoin框架 1.1 ForkJoin框架 ForkJoinPool一种ExecutorService的实现,运行ForkJoinTask任务.ForkJoinPool区别于其它Execu ...
- 工作▍推荐系统算法工程师是搞啥的?工作内容、技能、面试题全解析
推荐算法工程师就业指导 2016年,YouTube发表论文,将深度神经网络应用推荐系统中,实现了从大规模可选的推荐内容中找到最有可能的推荐结果. 近年来,推荐系统被广泛的应用于电子商务推荐.个性化广告 ...
- 操作系统应该如何在多CPU上调度工作?
本章将介绍多处理器调度(multiprocessor scheduling)的基础知识.由于本章内容相对较深,建议认真学习并发相关的内容后再读. 过去很多年,多处理器(multiprocessor)系 ...
- 如何偷窃局域网其它电脑文件_偷窃工作
如何偷窃局域网其它电脑文件 Before talking about Work Stealing, we need to talk about task management. We could us ...
- Fork/Join工作原理解析
一.如何高效利用CPU 在介绍Fork/Join框架之前,思考一个问题,在多线程的情况下,如何才能高效的利用CPU,以常用的线程池为例,线程池的线程数设置多少合适? 通常调整线程池中的线程数量其核心目 ...
- 史上最全Java 8新特性总结,助你在工作事半功倍
1.Lambda表达式 1.初体验 目标:了解使用匿名内部类存在的问题,体验Lambda 匿名内部类存在的问题:当需要启动一个线程去完成任务时,通常会通过Runnable 接口来定义任务内容,并使用T ...
最新文章
- pytorch lstm 写诗文的魔改,测试,猜想
- 报名 | 腾讯量子实验室发起Alchemy竞赛,推动分子性质的AI预测研发
- 2020年快手校招JAVA岗笔试第三题
- MySQL主从复制主库宕机:1更新完relaylog2最大post设为主库 配置及删除之前从库信息3其他从库新建连接
- mongodb $ifNull
- Spring Data JPA 从入门到精通~@EntityListeners注解示例
- R语言学习笔记(五)假设检验及其R实现
- 线程同步 -事件Event、临界区对象CriticalSection
- 洛谷P1069 细胞分裂 数学
- python visa模块_python – Mac OS X上的NI VISA pyVisa(Snow Leopard)
- 今日科技联播:全球区块链专利申请数超5000件,Coinplug第一阿里紧随其后
- 微信公众号(服务号)申请流程(仅供参考)
- Ramda.js 函数式编程 (==在angular中引入)
- excel 公式和函数
- 单元格内多个姓名拆分成一列_excel一个单元格中有多个名字,怎样拆分这些名字,名字是用空格分开的《excel批量分列》...
- python给excel添加超链接_《python3教程》 python用xlwt,超链接到另一sheet,如何设置HYPERLINK...
- 粒子滤波与重要性采样
- 【Win11共享打印机,win11家庭版中添加组策略】
- 轻量级图像分类模型-MobileNetV3阅读笔记
- 错过就要多花 200 元,Unite 2017 Shanghai 五折抢票倒计时!