Dynamic Assignment
Dynamic Assignment using a Single Queue
Concept
所有 thread 共同維護一個 task queue,每次 thread 空閒時就會從 task queue 中拿一個新工作執行
Problem
因為 task queue 是 shared resource,所以每次要取 task 時就必須 lock 整個 queue,這樣可能造成其他空閒的 thread 需要等待他拿完他們才可以拿
Solution
我們可以讓 thread 每次拿多個 task,這樣他就不用頻繁的去 queue 中拿 task 了
但要注意如果一次拿太多 task,可能反而造成 workload imbalance
Dynamic Assignment using Multiple Queue
Concept
每個 thread 都有自己的 task queue,每次 thread 只會從自己的 queue 中拿任務,產生的任務也往自己的 queue 中塞
而當 queue 中沒有任務時,我們才會去其他 thread 的 queue 中偷 task
Problem
在偷任務時的 synchronization 很耗時