Instans Penjadwal
Dokumen ini menjelaskan peran instans penjadwal dalam Runtime Konkurensi dan cara menggunakan konkurensi::Scheduler dan konkurensi::Kelas CurrentScheduler untuk membuat dan mengelola instans penjadwal. Instans penjadwal berguna saat Anda ingin mengaitkan kebijakan penjadwalan eksplisit dengan jenis beban kerja tertentu. Misalnya, Anda dapat membuat satu instans penjadwal untuk menjalankan beberapa tugas pada prioritas utas yang ditingkatkan dan menggunakan penjadwal default untuk menjalankan tugas lain pada prioritas utas normal.
Tip
Runtime Konkurensi menyediakan penjadwal default, dan oleh karena itu Anda tidak diharuskan untuk 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.
Bagian
Kelas Scheduler dan CurrentScheduler
Penjadwal Tugas memungkinkan aplikasi menggunakan satu atau beberapa instans penjadwal untuk menjadwalkan pekerjaan. Kelas konkurensi::Scheduler mewakili instans penjadwal dan merangkum fungsionalitas yang terkait dengan tugas penjadwalan.
Utas yang dilampirkan ke penjadwal dikenal sebagai konteks eksekusi, atau hanya konteks. Satu penjadwal dapat aktif pada konteks saat ini kapan saja. Penjadwal aktif juga dikenal sebagai penjadwal saat ini. Runtime Konkurensi menggunakan kelas konkurensi::CurrentScheduler untuk menyediakan akses ke penjadwal saat ini. Penjadwal saat ini untuk satu konteks dapat berbeda dari penjadwal saat ini untuk konteks lain. Runtime tidak menyediakan representasi tingkat proses dari penjadwal saat ini.
Biasanya, CurrentScheduler
kelas digunakan untuk mengakses penjadwal saat ini. Kelas Scheduler
ini berguna ketika Anda perlu mengelola penjadwal yang bukan yang saat ini.
Bagian berikut menjelaskan cara membuat dan mengelola instans penjadwal. Untuk contoh lengkap yang mengilustrasikan tugas-tugas ini, lihat Cara: Mengelola Instans Penjadwal.
[Atas]
Membuat Instans Scheduler
Ada tiga cara ini untuk membuat Scheduler
objek:
Jika tidak ada penjadwal, runtime membuat penjadwal default untuk Anda saat Anda menggunakan fungsionalitas runtime, misalnya, algoritma paralel, untuk melakukan pekerjaan. Penjadwal default menjadi penjadwal saat ini untuk konteks yang memulai pekerjaan paralel.
Metode konkurensi::CurrentScheduler::Create membuat
Scheduler
objek yang menggunakan kebijakan tertentu dan mengaitkan penjadwal tersebut dengan konteks saat ini.Metode konkurensi::Scheduler::Create membuat
Scheduler
objek yang menggunakan kebijakan tertentu, tetapi tidak mengaitkannya dengan konteks saat ini.
Mengizinkan runtime untuk membuat penjadwal default memungkinkan semua tugas bersamaan berbagi penjadwal yang sama. Biasanya, fungsionalitas yang disediakan oleh Pustaka Pola Paralel (PPL) atau Pustaka Agen Asinkron digunakan untuk melakukan pekerjaan paralel. Oleh karena itu, Anda tidak perlu bekerja langsung dengan penjadwal untuk mengontrol kebijakan atau masa pakainya. Saat Anda menggunakan PPL atau Pustaka Agen, runtime membuat penjadwal default jika tidak ada dan menjadikannya penjadwal saat ini untuk setiap konteks. Saat Anda membuat penjadwal dan mengaturnya sebagai penjadwal saat ini, maka runtime menggunakan penjadwal tersebut untuk menjadwalkan tugas. Buat instans penjadwal tambahan hanya saat Anda memerlukan kebijakan penjadwalan tertentu. Untuk informasi selengkapnya tentang kebijakan yang terkait dengan penjadwal, lihat Kebijakan Penjadwal.
[Atas]
Mengelola Masa Pakai Instans Penjadwal
Runtime menggunakan mekanisme penghitungan referensi untuk mengontrol masa Scheduler
pakai objek.
Saat Anda menggunakan CurrentScheduler::Create
metode atau Scheduler::Create
metode untuk membuat Scheduler
objek, runtime mengatur jumlah referensi awal penjadwal tersebut menjadi satu. Runtime menambahkan jumlah referensi saat Anda memanggil metode konkurensi::Scheduler::Attach . Metode mengaitkan Scheduler::Attach
Scheduler
objek bersama dengan konteks saat ini. Ini menjadikannya penjadwal saat ini. Saat Anda memanggil CurrentScheduler::Create
metode , runtime keduanya membuat Scheduler
objek dan melampirkannya ke konteks saat ini (dan mengatur jumlah referensi ke satu). Anda juga dapat menggunakan konkurensi::Scheduler::Metode referensi untuk menaikkan jumlah Scheduler
referensi objek.
Runtime mengurangi jumlah referensi saat Anda memanggil metode konkurensi::CurrentScheduler::D etach untuk mencopot penjadwal saat ini, atau memanggil metode konkurensi::Scheduler::Release . Ketika jumlah referensi mencapai nol, runtime menghancurkan Scheduler
objek setelah semua tugas terjadwal selesai. Tugas yang sedang berjalan diizinkan untuk menaikkan jumlah referensi penjadwal saat ini. Oleh karena itu, jika jumlah referensi mencapai nol dan tugas menaikkan jumlah referensi, runtime tidak menghancurkan Scheduler
objek sampai jumlah referensi kembali mencapai nol dan semua tugas selesai.
Runtime mempertahankan tumpukan Scheduler
objek internal untuk setiap konteks. Saat Anda memanggil Scheduler::Attach
metode atau CurrentScheduler::Create
, runtime mendorong Scheduler
objek tersebut ke tumpukan untuk konteks saat ini. Ini menjadikannya penjadwal saat ini. Saat Anda memanggil CurrentScheduler::Detach
, runtime memunculkan penjadwal saat ini dari tumpukan untuk konteks saat ini dan mengatur yang sebelumnya sebagai penjadwal saat ini.
Runtime menyediakan beberapa cara untuk mengelola masa pakai instans penjadwal. Tabel berikut menunjukkan metode yang sesuai yang merilis atau melepaskan penjadwal dari konteks saat ini untuk setiap metode yang membuat atau melampirkan penjadwal ke konteks saat ini.
Membuat atau melampirkan metode | Metode rilis atau lepas |
---|---|
CurrentScheduler::Create |
CurrentScheduler::Detach |
Scheduler::Create |
Scheduler::Release |
Scheduler::Attach |
CurrentScheduler::Detach |
Scheduler::Reference |
Scheduler::Release |
Memanggil metode rilis atau pelepasan yang tidak pantas menghasilkan perilaku yang tidak ditentukan dalam runtime.
Saat Anda menggunakan fungsionalitas, misalnya, PPL, yang menyebabkan runtime membuat penjadwal default untuk Anda, jangan merilis atau melepaskan penjadwal ini. Runtime mengelola masa pakai penjadwal apa pun yang dibuatnya.
Karena runtime tidak menghancurkan Scheduler
objek sebelum semua tugas selesai, Anda dapat menggunakan metode konkurensi::Scheduler::RegisterShutdownEvent atau metode konkurensi::CurrentScheduler::RegisterShutdownEvent untuk menerima pemberitahuan ketika Scheduler
objek dihancurkan. Ini berguna ketika Anda harus menunggu setiap tugas yang dijadwalkan oleh Scheduler
objek selesai.
[Atas]
Metode dan Fitur
Bagian ini meringkas metode penting dari CurrentScheduler
kelas dan Scheduler
.
Anggap kelas sebagai pembantu CurrentScheduler
untuk membuat penjadwal untuk digunakan pada konteks saat ini. Kelas ini Scheduler
memungkinkan Anda mengontrol penjadwal yang termasuk dalam konteks lain.
Tabel berikut menunjukkan metode penting yang ditentukan oleh CurrentScheduler
kelas.
Metode | Deskripsi |
---|---|
Buat | Scheduler Membuat objek yang menggunakan kebijakan yang ditentukan dan mengaitkannya dengan konteks saat ini. |
Dapatkan | Mengambil penunjuk ke Scheduler objek yang terkait dengan konteks saat ini. Metode ini tidak menaikkan jumlah Scheduler referensi objek. |
Melepaskan | Mencopot penjadwal saat ini dari konteks saat ini dan mengatur yang sebelumnya sebagai penjadwal saat ini. |
RegisterShutdownEvent | Mendaftarkan peristiwa yang ditetapkan runtime saat penjadwal saat ini dihancurkan. |
CreateScheduleGroup | Membuat objek konkurensi::ScheduleGroup di penjadwal saat ini. |
ScheduleTask | Menambahkan tugas ringan ke antrean penjadwalan penjadwal saat ini. |
GetPolicy | Mengambil salinan kebijakan yang terkait dengan penjadwal saat ini. |
Tabel berikut menunjukkan metode penting yang ditentukan oleh Scheduler
kelas.
Metode | Deskripsi |
---|---|
Buat | Scheduler Membuat objek yang menggunakan kebijakan yang ditentukan. |
Melampirkan | Mengaitkan Scheduler objek bersama dengan konteks saat ini. |
Referensi | Menaikkan penghitung Scheduler referensi objek. |
Rilis | Mengurangi penghitung Scheduler referensi objek. |
RegisterShutdownEvent | Mendaftarkan peristiwa yang ditetapkan runtime saat Scheduler objek dihancurkan. |
CreateScheduleGroup | Membuat objek konkurensi::ScheduleGroup dalam Scheduler objek. |
ScheduleTask | Menjadwalkan tugas ringan dari Scheduler objek. |
GetPolicy | Mengambil salinan kebijakan yang terkait dengan Scheduler objek. |
SetDefaultSchedulerPolicy | Mengatur kebijakan untuk runtime yang akan digunakan saat membuat penjadwal default. |
ResetDefaultSchedulerPolicy | Memulihkan kebijakan default ke kebijakan yang aktif sebelum panggilan ke SetDefaultSchedulerPolicy . Jika penjadwal default dibuat setelah panggilan ini, runtime menggunakan pengaturan kebijakan default untuk membuat penjadwal. |
[Atas]
Contoh
Untuk contoh dasar tentang cara membuat dan mengelola instans penjadwal, lihat Cara: Mengelola Instans Penjadwal.
Baca juga
Tugas Microsoft Azure Scheduler
Cara: Mengelola Instans Scheduler
Kebijakan Penjadwal
Jadwalkan Grup
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