一般使用双端队列来配合工作窃取算法的使用,被窃取的线程永远只从双端队列头部获取任务执行,而窃取任务的线程则永远从双端队列的尾部获取任务执行。通过这样的方法,可以让线程被充分的利用,不会空闲下来,同时一个线程从队列头拿任务,一个线程从队列尾窃取任务,线程间的竞争也大大减少了,不过如果双端队列中只剩下一个任务了,就会出现竞争的情况。所以工作窃取算法还是存在竞争情况的,它只是通过双端队列减少了线程间的竞争。
工作窃取算法就不存在竞争情况了?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
并发编程的Bug源头:可见性、原子性和有序性问题
Eric597247
2020-07-07 12:49:39
对 Java 四种线程池的简要分析
Geffin
2020-07-08 10:40:33
弄懂 ThreadLocal,看这一篇就够了
Geffin
2020-07-08 10:04:50
我手写了AQS实现、画了3张流程图,就是为了让你彻底搞明白AQS原理
快乐柠檬
2020-07-07 20:23:31
Lock锁的方法使用
ly_dsjing
2020-07-06 21:39:40
什么是阻塞队列(BlockingQueue)?
不懂的浪漫
2020-07-06 19:56:51
为什么 HashMap 链表长度超过8才转为红黑树?
不懂的浪漫
2020-07-06 19:16:13
为什么说本质上只有一种实现线程的方式?
不懂的浪漫
2020-07-06 19:16:13
同样是线程安全,ConcurrentHashMap 和 Hashtable 区别?
不懂的浪漫
2020-07-06 19:16:13
Java 中常见的阻塞队列有哪些?
不懂的浪漫
2020-07-06 19:16:13
Java 阻塞队列中的常用方法及区别
不懂的浪漫
2020-07-06 19:16:13
Java-线程中的异常
wjjiang2333
2020-07-05 06:37:41
AbstractQueuedSynchronizer源码分析(一):AbstractOwnableSynchronizer和Node
A_finder
2020-07-05 04:04:02