一般使用雙端隊列來配合工作竊取算法的使用,被竊取的線程永遠只從雙端隊列頭部獲取任務執行,而竊取任務的線程則永遠從雙端隊列的尾部獲取任務執行。通過這樣的方法,可以讓線程被充分的利用,不會空閒下來,同時一個線程從隊列頭拿任務,一個線程從隊列尾竊取任務,線程間的競爭也大大減少了,不過如果雙端隊列中只剩下一個任務了,就會出現競爭的情況。所以工作竊取算法還是存在競爭情況的,它只是通過雙端隊列減少了線程間的競爭。
工作竊取算法就不存在競爭情況了?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
併發編程的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