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::AttachScheduler 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