演算法 工作竊取演算法(work stealing)。

2021-09-02 23:14:05 字數 472 閱讀 9317

工作竊取演算法是指某個執行緒從其他佇列裡竊取任務來執行。那麼,為什麼需要使用工作竊取演算法呢?假如我們需要做乙個比較大的任務,可以把這個任務分割為若干互不依賴的子任務,為了減少執行緒間的競爭,把這些子任務分別放到不同的佇列裡,並為每個佇列建立乙個單獨的執行緒來執行佇列裡的任務,執行緒和佇列一一對應。比如a執行緒負責處理a佇列裡的任務。但是,有的執行緒會先把自己佇列裡的任務幹完,而其他執行緒對應的佇列裡還有任務等待處理。幹完活的執行緒與其等著,不如去幫其他執行緒幹活,於是他就去其他執行緒的佇列裡竊取乙個任務來執行。而在這時他們會訪問同乙個佇列,所以為了減少竊取任務執行緒和被竊取任務執行緒之間的競爭,通常會使用雙端佇列,被竊取任務執行緒永遠從雙端佇列的頭部拿任務執行,而竊取任務的執行緒永遠從雙端佇列的尾部拿任務執行。

工作竊取的執行流程如下圖所示。

經典示例:fork/join框架。

生產者消費者模式之工作竊取演算法

生產者消費者模式之工作竊取演算法 1 乙個通道只有乙個佇列,多個消費者共享乙個佇列例項,導致鎖的競爭,如果乙個通道擁有對個佇列,則消費者可以從通道中獲取各自佇列獲取資料。2 如要服務有高效能和可靠性的要求,consumer producer模式請使用 kafka等開源工具 public inte c...

時間演算法 工作備忘2016 1 27

1 sysdate 時間加減法 oracle中時間中的加減法都是有 以天單位,如 select sysdate 1 from dual 都是前一天後一天 如果需要加減其他時間單位 可以1 對應單位時間 如 時 1 24,分 1 24 60 秒 1 24 60 60 2 用系統時間sysdate限定反...

工作分配問題 演算法設計

time limit 1000 ms memory limit 65536 kib 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為 cij。試設計乙個演算法,為每乙個人都分配1 件不同的工作,並使總費用達到最小。設計乙個演算法,對於給定的工作費用,計算最佳工作分配方案,使總費用達到最小...