Kebijakan Penjadwal

Dokumen ini menjelaskan peran kebijakan penjadwal dalam Concurrency Runtime. Kebijakan penjadwal mengontrol strategi yang digunakan penjadwal saat mengelola tugas. Misalnya, pertimbangkan aplikasi yang memerlukan beberapa tugas untuk dijalankan di THREAD_PRIORITY_NORMAL dan tugas lain untuk dijalankan di THREAD_PRIORITY_HIGHEST. Anda dapat membuat dua instans penjadwal: satu yang menentukan ContextPriority kebijakan menjadi THREAD_PRIORITY_NORMAL dan yang lain yang menentukan kebijakan yang sama menjadi THREAD_PRIORITY_HIGHEST.

Dengan menggunakan kebijakan penjadwal, Anda dapat membagi sumber daya pemrosesan yang tersedia dan menetapkan sekumpulan sumber daya tetap untuk setiap penjadwal. Misalnya, pertimbangkan algoritma paralel yang tidak menskalakan melebihi empat prosesor. Anda dapat membuat kebijakan penjadwal yang membatasi tugasnya untuk menggunakan tidak lebih dari empat prosesor secara bersamaan.

Tip

Runtime Konkurensi menyediakan penjadwal default. Oleh karena itu, Anda tidak perlu membuatnya di aplikasi Anda. Karena Task Scheduler membantu Anda menyempurnakan performa aplikasi Anda, kami sarankan Anda memulai dengan Pustaka Pola Paralel (PPL) atau Pustaka Agen Asinkron jika Anda baru menggunakan Runtime Konkurensi.

Saat Anda menggunakan konkurensi::CurrentScheduler::Create, concurrency::Scheduler::Create, or concurrency::Scheduler::SetDefaultSchedulerPolicy method untuk membuat instans scheduler, Anda menyediakan objek concurrency::SchedulerPolicy yang berisi kumpulan pasangan kunci-nilai yang menentukan perilaku penjadwal. SchedulerPolicy Konstruktor mengambil jumlah variabel argumen. Argumen pertama adalah jumlah elemen kebijakan yang akan Anda tentukan. Argumen yang tersisa adalah pasangan kunci-nilai untuk setiap elemen kebijakan. Contoh berikut membuat SchedulerPolicy objek yang menentukan tiga elemen kebijakan. Runtime menggunakan nilai default untuk kunci kebijakan yang tidak ditentukan.

SchedulerPolicy policy(3,       
   MinConcurrency, 2,
   MaxConcurrency, 4,
   ContextPriority, THREAD_PRIORITY_HIGHEST
);

Enumerasi concurrency::P olicyElementKey menentukan kunci kebijakan yang terkait dengan Task Scheduler. Tabel berikut menjelaskan kunci kebijakan dan nilai default yang digunakan runtime untuk masing-masing kunci tersebut.

Kunci Kebijakan Deskripsi Nilai Default
SchedulerKind Nilai konkurensi::SchedulerType yang menentukan jenis utas yang akan digunakan untuk menjadwalkan tugas. ThreadScheduler (gunakan utas normal). Ini adalah satu-satunya nilai yang valid untuk kunci ini.
MaxConcurrency Nilai unsigned int yang menentukan jumlah maksimum sumber daya konkurensi yang digunakan penjadwal. konkurensi::MaxExecutionResources
MinConcurrency Nilai unsigned int yang menentukan jumlah minimum sumber daya konkurensi yang digunakan penjadwal. 1
TargetOversubscriptionFactor Nilai unsigned int yang menentukan berapa banyak utas yang akan dialokasikan ke setiap sumber daya pemrosesan. 1
LocalContextCacheSize Nilai unsigned int yang menentukan jumlah maksimum konteks yang dapat di-cache dalam antrean lokal setiap prosesor virtual. 8
ContextStackSize Nilai unsigned int yang menentukan ukuran tumpukan, dalam kilobyte, untuk dicadangkan untuk setiap konteks. 0 (gunakan ukuran tumpukan default)
ContextPriority Nilai int yang menentukan prioritas utas dari setiap konteks. Ini bisa menjadi nilai apa pun yang dapat Anda teruskan ke SetThreadPriority atau INHERIT_THREAD_PRIORITY. THREAD_PRIORITY_NORMAL
SchedulingProtocol Nilai konkurensi::SchedulingProtocolType yang menentukan algoritma penjadwalan yang akan digunakan. EnhanceScheduleGroupLocality
DynamicProgressFeedback Nilai concurrency::D ynamicProgressFeedbackType yang menentukan apakah akan menyeimbangkan ulang sumber daya sesuai dengan informasi kemajuan berbasis statistik.

Catatan Jangan atur kebijakan ini ke ProgressFeedbackDisabled karena dicadangkan untuk digunakan oleh runtime.
ProgressFeedbackEnabled

Setiap penjadwal menggunakan kebijakannya sendiri saat menjadwalkan tugas. Kebijakan yang terkait dengan satu penjadwal tidak memengaruhi perilaku penjadwal lain. Selain itu, Anda tidak dapat mengubah kebijakan penjadwal setelah membuat Scheduler objek.

Penting

Gunakan hanya kebijakan penjadwal untuk mengontrol atribut untuk utas yang dibuat runtime bahasa umum. Jangan mengubah afinitas utas atau prioritas utas yang dibuat oleh runtime karena dapat menyebabkan perilaku yang tidak terdefinisi.

Runtime membuat penjadwal default untuk Anda jika Anda tidak membuatnya secara eksplisit. Jika Anda ingin menggunakan penjadwal default di aplikasi Anda, tetapi Anda ingin menentukan kebijakan untuk digunakan penjadwal tersebut , panggil metode konkurensi::Scheduler::SetDefaultSchedulerPolicy sebelum Anda menjadwalkan pekerjaan paralel. Jika Anda tidak memanggil Scheduler::SetDefaultSchedulerPolicy metode , runtime menggunakan nilai kebijakan default dari tabel.

Gunakan konkurensi::CurrentScheduler::GetPolicy dan konkurensi::Scheduler::GetPolicy metode untuk mengambil salinan kebijakan penjadwal. Nilai kebijakan yang Anda terima dari metode ini dapat berbeda dari nilai kebijakan yang Anda tentukan saat membuat penjadwal.

Contoh

Untuk memeriksa contoh yang menggunakan kebijakan penjadwal tertentu untuk mengontrol perilaku penjadwal, lihat Cara: Menentukan Kebijakan Penjadwal Tertentu dan Cara: Membuat Agen yang Menggunakan Kebijakan Penjadwal Tertentu.

Baca juga

Tugas Microsoft Azure Scheduler
Cara: Menentukan Kebijakan Penjadwal Tertentu
Cara: Membuat Agen yang Menggunakan Kebijakan Penjadwal Tertentu