排程群組
本檔說明並行執行時間中排程群組的角色。 排 程群組 會將相關工作同質性或群組在一起。 每個排程器都有一或多個排程群組。 當您需要在工作之間有高度位置關係時 (例如一個相關工作的群組可因為在相同處理器節點上執行而受益),請使用排程群組。 相反地,當您的應用程式具有特定品質需求時,請使用排程器實例,例如,當您想要限制配置給一組工作之處理資源的數量時。 如需排程器實例的詳細資訊,請參閱 排程器實例 。
提示
並行執行階段會提供預設排程器,因此您不需要在應用程式中建立排程器。 由於工作排程器可協助您微調應用程式的效能,因此如果您不熟悉並行執行時間,建議您從平行模式程式庫 (PPL) 或 非同步代理程式程式庫 開始 。
每個 Scheduler
物件都有每個排程節點的預設排程群組。 排程節點 會對應至基礎系統拓撲。 執行時間會為每個處理器套件或非統一記憶體架構 (NUMA) 節點建立一個排程節點,無論數目較大。 如果您未明確將工作與排程群組產生關聯,排程器會選擇要新增工作的群組。
排 SchedulingProtocol
程器原則會影響排程器在每個排程群組中執行工作的順序。 當 設定為 EnhanceScheduleGroupLocality
(也就是預設值)時 SchedulingProtocol
,工作排程器會從排程群組中選擇下一個工作,而當目前工作完成或合作產生時,工作排程器會處理該工作。 工作排程器會先搜尋目前排程群組的工作,再移至下一個可用的群組。 相反地,當 設定為 EnhanceForwardProgress
時 SchedulingProtocol
,排程器會在每個工作完成或產生之後移至下一個排程群組。 如需比較這些原則的範例,請參閱 如何:使用排程群組影響執行 順序。
執行時間會使用 並行::ScheduleGroup 類別來代表排程群組。 若要建立 ScheduleGroup
物件,請呼叫 concurrency::CurrentScheduler::CreateScheduleGroup 或 concurrency::Scheduler::CreateScheduleGroup 方法。 執行時間會使用參考計數機制來控制物件的存留期 ScheduleGroup
,就如同物件一 Scheduler
樣。 當您建立 ScheduleGroup
物件時,執行時間會將參考計數器設定為一個。 並行 ::ScheduleGroup::Reference 方法會將參考計數器遞增一個。 concurrency ::ScheduleGroup::Release 方法會將參考計數器遞減一。
並行執行時間中的許多類型可讓您將物件與排程群組產生關聯。 例如, 並行::agent 類別和訊息區塊類別,例如 concurrency::unbounded_buffer 、 concurrency::join 和 concurrency:: timer ,提供採用 ScheduleGroup
物件的建構函式多載版本。 執行時間會使用 Scheduler
與此 ScheduleGroup
物件相關聯的 物件來排程工作。
您也可以使用 並行::ScheduleGroup::ScheduleTask 方法來排程輕量型工作。 如需輕量型工作的詳細資訊,請參閱 輕量型工作 。
範例
如需使用排程群組控制工作執行順序的範例,請參閱 如何:使用排程群組影響執行 順序。