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 很耗時