共用方式為


排程群組

本文件說明排程群組在並行執行階段中的角色。 「排程群組」(Schedule Group) 會將相關的工作相似化或進行分組。 每一個排程器有一個或多個排程群組。 當工作之間需要有高程度的地域性,例如當相關工作群組可從執行於相同處理器節點獲益時,請使用排程群組。 相反地,若應用程式有特定品質要求,例如您想要限制配置給一組工作的處理資源數目,則使用排程器執行個體。 如需排程器執行個體的詳細資訊,請參閱排程器執行個體

提示

並行執行階段提供了預設排程器,因此您不需要在應用程式中建立排程器。因為工作排程器有助於微調應用程式效能,如果您是並行執行階段的新使用者,建議請從平行模式程式庫 (PPL)非同步代理程式程式庫開始。

每個 Scheduler 物件針對不同的排程節點,有一個預設排程群組。 「排程節點」(Scheduling Node) 會對應到基礎的系統拓撲。 執行階段會為每個處理器封裝建立一個排程節點,或建立非統一記憶體架構 (NUMA) 節點,視何者數量較大而定。 如果您未明確地建立工作與排程群組的關聯,排程器會選擇要將工作加入至其中的群組。

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

執行階段會使用 concurrency::ScheduleGroup 類別代表排程群組。 若要建立 ScheduleGroup 物件,請呼叫 concurrency::CurrentScheduler::CreateScheduleGroupconcurrency::Scheduler::CreateScheduleGroup 方法。 執行階段會使用參考計數機制來控制 ScheduleGroup 物件的存留期,正如同它對 Scheduler 物件的處理方式一般。 當您建立 ScheduleGroup 物件時,執行階段會將參考計數器設為 1。 concurrency::ScheduleGroup::Reference 方法會使參考計數器以一為單位遞增。 concurrency::ScheduleGroup::Release 方法會使參考計數器以一為單位遞減。

並行執行階段中有許多類型可讓您建立物件與排程群組的關聯。 例如,concurrency::agent 類別和訊息區類別 (如 concurrency::unbounded_bufferconcurrency::joinconcurrency::timer),可為採用 ScheduleGroup 物件的建構函式提供多載版本。 執行階段可使用與這個 ScheduleGroup 物件相關聯的 Scheduler 物件,進行工作排程。

您也可以使用 concurrency::ScheduleGroup::ScheduleTask 方法來排程輕量型工作。 如需輕量型工作的詳細資訊,請參閱輕量型工作

範例

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

請參閱

工作

如何:使用排程群組來影響執行順序

概念

工作排程器 (並行執行階段)

排程器執行個體