Struktur IScheduler
Antarmuka ke abstraksi penjadwal kerja. Resource Manager Concurrency Runtime menggunakan antarmuka ini untuk berkomunikasi dengan penjadwal kerja.
Sintaks
struct IScheduler;
Anggota
Metode Publik
Nama | Deskripsi |
---|---|
IScheduler::AddVirtualProcessors | Menyediakan penjadwal dengan sekumpulan akar prosesor virtual untuk penggunaannya. Setiap IVirtualProcessorRoot antarmuka mewakili hak untuk menjalankan satu utas yang dapat melakukan pekerjaan atas nama penjadwal. |
IScheduler::GetId | Mengembalikan pengidentifikasi unik untuk penjadwal. |
IScheduler::GetPolicy | Mengembalikan salinan kebijakan penjadwal. Untuk informasi selengkapnya tentang kebijakan penjadwal, lihat SchedulerPolicy. |
IScheduler::NotifyResourcesExternallyBusy | Memberi tahu penjadwal ini bahwa utas perangkat keras yang diwakili oleh set akar prosesor virtual dalam array ppVirtualProcessorRoots sekarang digunakan oleh penjadwal lain. |
IScheduler::NotifyResourcesExternallyIdle | Memberi tahu penjadwal ini bahwa utas perangkat keras yang diwakili oleh set akar prosesor virtual dalam array ppVirtualProcessorRoots tidak digunakan oleh penjadwal lain. |
IScheduler::RemoveVirtualProcessors | Memulai penghapusan akar prosesor virtual yang sebelumnya dialokasikan untuk penjadwal ini. |
IScheduler::Statistics | Menyediakan informasi yang terkait dengan tingkat kedatangan dan penyelesaian tugas, dan perubahan panjang antrean untuk penjadwal. |
Keterangan
Jika Anda menerapkan penjadwal kustom yang berkomunikasi dengan Resource Manager, Anda harus menyediakan implementasi IScheduler
antarmuka. Antarmuka ini adalah salah satu ujung dari saluran komunikasi dua arah antara penjadwal dan Resource Manager. Ujung lainnya diwakili oleh IResourceManager
antarmuka dan ISchedulerProxy
yang diimplementasikan oleh Resource Manager.
Hierarki Warisan
IScheduler
Persyaratan
Header: concrtrm.h
Namespace: konkurensi
Metode IScheduler::AddVirtualProcessors
Menyediakan penjadwal dengan sekumpulan akar prosesor virtual untuk penggunaannya. Setiap IVirtualProcessorRoot
antarmuka mewakili hak untuk menjalankan satu utas yang dapat melakukan pekerjaan atas nama penjadwal.
virtual void AddVirtualProcessors(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parameter
ppVirtualProcessorRoots
Array IVirtualProcessorRoot
antarmuka yang mewakili akar prosesor virtual yang ditambahkan ke penjadwal.
count
Jumlah IVirtualProcessorRoot
antarmuka dalam array.
Keterangan
Resource Manager memanggil AddVirtualProcessor
metode untuk memberikan serangkaian akar prosesor virtual awal kepada penjadwal. Ini juga dapat memanggil metode untuk menambahkan akar prosesor virtual ke penjadwal ketika menyeimbangkan kembali sumber daya di antara penjadwal.
Metode IScheduler::GetId
Mengembalikan pengidentifikasi unik untuk penjadwal.
virtual unsigned int GetId() const = 0;
Tampilkan Nilai
Pengidentifikasi bilangan bulat yang unik.
Keterangan
Anda harus menggunakan fungsi GetSchedulerId untuk mendapatkan pengidentifikasi unik untuk objek yang mengimplementasikan IScheduler
antarmuka, sebelum Anda menggunakan antarmuka sebagai parameter untuk metode yang disediakan oleh Resource Manager. Anda diharapkan untuk mengembalikan pengidentifikasi yang sama ketika GetId
fungsi dipanggil.
Pengidentifikasi yang diperoleh dari sumber yang berbeda dapat mengakibatkan perilaku yang tidak ditentukan.
Metode IScheduler::GetPolicy
Mengembalikan salinan kebijakan penjadwal. Untuk informasi selengkapnya tentang kebijakan penjadwal, lihat SchedulerPolicy.
virtual SchedulerPolicy GetPolicy() const = 0;
Tampilkan Nilai
Salinan kebijakan penjadwal.
IScheduler::NotifyResourcesExternallyBusy Method
Memberi tahu penjadwal ini bahwa utas perangkat keras yang diwakili oleh set akar prosesor virtual dalam array ppVirtualProcessorRoots
sekarang digunakan oleh penjadwal lain.
virtual void NotifyResourcesExternallyBusy(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parameter
ppVirtualProcessorRoots
Array IVirtualProcessorRoot
antarmuka yang terkait dengan utas perangkat keras tempat penjadwal lain menjadi sibuk.
count
Jumlah IVirtualProcessorRoot
antarmuka dalam array.
Keterangan
Dimungkinkan bagi utas perangkat keras tertentu untuk ditetapkan ke beberapa penjadwal secara bersamaan. Salah satu alasan untuk ini bisa jadi tidak ada cukup utas perangkat keras pada sistem untuk memenuhi konkurensi minimum untuk semua penjadwal, tanpa berbagi sumber daya. Kemungkinan lain adalah bahwa sumber daya untuk sementara ditetapkan ke penjadwal lain ketika penjadwal pemilik tidak menggunakannya, dengan cara semua akar prosesor virtualnya pada utas perangkat keras yang dinonaktifkan.
Tingkat langganan utas perangkat keras ditandai dengan jumlah utas berlangganan dan akar prosesor virtual yang diaktifkan yang terkait dengan utas perangkat keras tersebut. Dari sudut pandang penjadwal tertentu, tingkat langganan eksternal utas perangkat keras adalah bagian dari langganan yang dikontribusikan penjadwal lain. Pemberitahuan bahwa sumber daya sibuk secara eksternal dikirim ke penjadwal ketika tingkat langganan eksternal untuk utas perangkat keras bergerak dari nol ke wilayah positif.
Pemberitahuan melalui metode ini hanya dikirim ke penjadwal yang memiliki kebijakan di mana nilai untuk MinConcurrency
kunci kebijakan sama dengan nilai untuk MaxConcurrency
kunci kebijakan. Untuk informasi selengkapnya tentang kebijakan penjadwal, lihat SchedulerPolicy.
Penjadwal yang memenuhi syarat untuk pemberitahuan mendapatkan serangkaian pemberitahuan awal saat dibuat, memberi tahunya apakah sumber daya yang baru saja ditetapkan sibuk secara eksternal atau diam.
Metode IScheduler::NotifyResourcesExternallyIdle
Memberi tahu penjadwal ini bahwa utas perangkat keras yang diwakili oleh set akar prosesor virtual dalam array ppVirtualProcessorRoots
tidak digunakan oleh penjadwal lain.
virtual void NotifyResourcesExternallyIdle(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parameter
ppVirtualProcessorRoots
Array IVirtualProcessorRoot
antarmuka yang terkait dengan utas perangkat keras tempat penjadwal lain menjadi menganggur.
count
Jumlah IVirtualProcessorRoot
antarmuka dalam array.
Keterangan
Dimungkinkan bagi utas perangkat keras tertentu untuk ditetapkan ke beberapa penjadwal secara bersamaan. Salah satu alasan untuk ini bisa jadi tidak ada cukup utas perangkat keras pada sistem untuk memenuhi konkurensi minimum untuk semua penjadwal, tanpa berbagi sumber daya. Kemungkinan lain adalah bahwa sumber daya untuk sementara ditetapkan ke penjadwal lain ketika penjadwal pemilik tidak menggunakannya, dengan cara semua akar prosesor virtualnya pada utas perangkat keras yang dinonaktifkan.
Tingkat langganan utas perangkat keras ditandai dengan jumlah utas berlangganan dan akar prosesor virtual yang diaktifkan yang terkait dengan utas perangkat keras tersebut. Dari sudut pandang penjadwal tertentu, tingkat langganan eksternal utas perangkat keras adalah bagian dari langganan yang dikontribusikan penjadwal lain. Pemberitahuan bahwa sumber daya sibuk secara eksternal dikirim ke penjadwal ketika tingkat langganan eksternal untuk utas perangkat keras jatuh ke nol dari nilai positif sebelumnya.
Pemberitahuan melalui metode ini hanya dikirim ke penjadwal yang memiliki kebijakan di mana nilai untuk MinConcurrency
kunci kebijakan sama dengan nilai untuk MaxConcurrency
kunci kebijakan. Untuk informasi selengkapnya tentang kebijakan penjadwal, lihat SchedulerPolicy.
Penjadwal yang memenuhi syarat untuk pemberitahuan mendapatkan serangkaian pemberitahuan awal saat dibuat, memberi tahunya apakah sumber daya yang baru saja ditetapkan sibuk secara eksternal atau diam.
Metode IScheduler::RemoveVirtualProcessors
Memulai penghapusan akar prosesor virtual yang sebelumnya dialokasikan untuk penjadwal ini.
virtual void RemoveVirtualProcessors(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parameter
ppVirtualProcessorRoots
Array IVirtualProcessorRoot
antarmuka yang mewakili akar prosesor virtual yang akan dihapus.
count
Jumlah IVirtualProcessorRoot
antarmuka dalam array.
Keterangan
Resource Manager memanggil RemoveVirtualProcessors
metode untuk mengambil kembali sekumpulan akar prosesor virtual dari penjadwal. Penjadwal diharapkan untuk memanggil metode Hapus pada setiap antarmuka ketika dilakukan dengan akar prosesor virtual. Jangan gunakan IVirtualProcessorRoot
antarmuka setelah Anda memanggil metode di Remove
atasnya.
Parameter ppVirtualProcessorRoots
menunjuk ke array antarmuka. Di antara set akar prosesor virtual yang akan dihapus, akar belum pernah diaktifkan dapat segera dikembalikan menggunakan metode .Remove
Akar yang telah diaktifkan dan menjalankan pekerjaan, atau telah dinonaktifkan dan menunggu pekerjaan tiba, harus dikembalikan secara asinkron. Penjadwal harus melakukan setiap upaya untuk menghapus akar prosesor virtual secepat mungkin. Menunda penghapusan akar prosesor virtual dapat mengakibatkan oversubscription yang tidak disengaja dalam penjadwal.
Metode IScheduler::Statistics
Menyediakan informasi yang terkait dengan tingkat kedatangan dan penyelesaian tugas, dan perubahan panjang antrean untuk penjadwal.
virtual void Statistics(
_Out_ unsigned int* pTaskCompletionRate,
_Out_ unsigned int* pTaskArrivalRate,
_Out_ unsigned int* pNumberOfTasksEnqueued) = 0;
Parameter
pTaskCompletionRate
Jumlah tugas yang telah diselesaikan oleh penjadwal sejak panggilan terakhir ke metode ini.
pTaskArrivalRate
Jumlah tugas yang telah tiba di penjadwal sejak panggilan terakhir ke metode ini.
pNumberOfTasksEnqueued
Jumlah total tugas di semua antrean penjadwal.
Keterangan
Metode ini dipanggil oleh Resource Manager untuk mengumpulkan statistik untuk penjadwal. Statistik yang dikumpulkan di sini akan digunakan untuk mendorong algoritma umpan balik dinamis untuk menentukan kapan tepat untuk menetapkan lebih banyak sumber daya ke penjadwal dan kapan harus mengambil sumber daya. Nilai yang disediakan oleh penjadwal dapat optimis dan tidak harus mencerminkan jumlah saat ini secara akurat.
Anda harus menerapkan metode ini jika Anda ingin Resource Manager menggunakan umpan balik tentang hal-hal seperti kedatangan tugas untuk menentukan cara menyeimbangkan sumber daya antara penjadwal Anda dan penjadwal lain yang terdaftar di Resource Manager. Jika Anda memilih untuk tidak mengumpulkan statistik, Anda dapat mengatur kunci DynamicProgressFeedback
kebijakan ke nilai DynamicProgressFeedbackDisabled
dalam kebijakan penjadwal Anda, dan Resource Manager tidak akan memanggil metode ini pada penjadwal Anda.
Dengan tidak adanya informasi statistik, Resource Manager akan menggunakan tingkat langganan utas perangkat keras untuk membuat keputusan alokasi dan migrasi sumber daya. Untuk informasi selengkapnya tentang tingkat langganan, lihat IExecutionResource::CurrentSubscriptionLevel.
Lihat juga
Namespace layanan konkurensi
PolicyElementKey
Kelas SchedulerPolicy
Struktur IExecutionContext
Struktur IThreadProxy
Struktur IVirtualProcessorRoot
Struktur IResourceManager