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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk