共用方式為


排程群組

本檔說明並行執行時間中排程群組的角色。 排 程群組 會將相關工作同質性或群組在一起。 每個排程器都有一或多個排程群組。 當您需要在工作之間有高度位置關係時 (例如一個相關工作的群組可因為在相同處理器節點上執行而受益),請使用排程群組。 相反地,當您的應用程式具有特定品質需求時,請使用排程器實例,例如,當您想要限制配置給一組工作之處理資源的數量時。 如需排程器實例的詳細資訊,請參閱 排程器實例

提示

並行執行階段會提供預設排程器,因此您不需要在應用程式中建立排程器。 由於工作排程器可協助您微調應用程式的效能,因此如果您不熟悉並行執行時間,建議您從平行模式程式庫 (PPL) 非同步代理程式程式庫 開始 。

每個 Scheduler 物件都有每個排程節點的預設排程群組。 排程節點 會對應至基礎系統拓撲。 執行時間會為每個處理器套件或非統一記憶體架構 (NUMA) 節點建立一個排程節點,無論數目較大。 如果您未明確將工作與排程群組產生關聯,排程器會選擇要新增工作的群組。

SchedulingProtocol 程器原則會影響排程器在每個排程群組中執行工作的順序。 當 設定為 EnhanceScheduleGroupLocality (也就是預設值)時 SchedulingProtocol ,工作排程器會從排程群組中選擇下一個工作,而當目前工作完成或合作產生時,工作排程器會處理該工作。 工作排程器會先搜尋目前排程群組的工作,再移至下一個可用的群組。 相反地,當 設定為 EnhanceForwardProgressSchedulingProtocol ,排程器會在每個工作完成或產生之後移至下一個排程群組。 如需比較這些原則的範例,請參閱 如何:使用排程群組影響執行 順序。

執行時間會使用 並行::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 方法來排程輕量型工作。 如需輕量型工作的詳細資訊,請參閱 輕量型工作

範例

如需使用排程群組控制工作執行順序的範例,請參閱 如何:使用排程群組影響執行 順序。

另請參閱

工作排程器
排程器執行個體
如何:使用排程群組來影響執行順序