Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 di dalam array ppVirtualProcessorRoots sedang digunakan oleh penjadwal lain. |
| IScheduler::NotifyResourcesExternallyIdle | Memberitahukan 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 elemen inti prosesor virtual yang telah dialokasikan sebelumnya 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 antarmuka IResourceManager dan ISchedulerProxy yang diimplementasikan oleh Pengelola Sumber Daya.
Hierarki Pewarisan
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 thread yang dapat melakukan pekerjaan untuk penjadwal.
virtual void AddVirtualProcessors(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parameter
ppVirtualProcessorRoots
Array IVirtualProcessorRoot antarmuka yang mewakili inti prosesor virtual yang sedang ditambahkan ke penjadwal.
count
Jumlah IVirtualProcessorRoot antarmuka dalam array.
Keterangan
Resource Manager memanggil metode AddVirtualProcessor untuk memberikan sekumpulan akar prosesor virtual awal kepada penjadwal. Ini juga dapat memanggil metode untuk menambahkan elemen akar prosesor virtual ke dalam penjadwal ketika membagi ulang 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 di dalam array ppVirtualProcessorRoots sedang 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 karena tidak ada cukup utas perangkat keras pada sistem untuk memenuhi keserempakan minimum untuk semua penjadwal yang ada, tanpa berbagi sumber daya. Kemungkinan lain adalah bahwa sumber daya untuk sementara ditetapkan ke penjadwal lain ketika penjadwal pemilik tidak menggunakannya, melalui cara semua inti prosesor virtualnya pada utas perangkat keras tersebut 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 keterlibatan eksternal dari thread perangkat keras adalah bagian dari keterlibatan yang diberikan oleh penjadwal lainnya. 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 dialokasikan sibuk secara eksternal atau menganggur.
Metode IScheduler::NotifyResourcesExternallyIdle
Memberitahukan 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
Serangkaian IVirtualProcessorRoot antarmuka yang berasosiasi dengan thread perangkat keras tempat penjadwal lain menjadi menganggur.
count
Jumlah antarmuka IVirtualProcessorRoot 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 sumber daya sementara diberikan ke penjadwal lain ketika penjadwal pemilik tidak menggunakannya, dengan cara semua akar virtual prosesor pada thread perangkat keras tersebut 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, level langganan eksternal dari sebuah utas perangkat keras adalah bagian dari langganan yang disumbangkan oleh penjadwal lainnya. 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 menerima serangkaian pemberitahuan awal saat dibuat, memberitahunya apakah sumber daya yang baru saja ditetapkan sibuk secara eksternal atau tidak aktif.
Metode IScheduler::RemoveVirtualProcessors
Memulai penghapusan elemen inti prosesor virtual yang telah dialokasikan sebelumnya untuk penjadwal ini.
virtual void RemoveVirtualProcessors(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parameter
ppVirtualProcessorRoots
Array antarmuka IVirtualProcessorRoot yang mewakili akar prosesor virtual yang akan dihapus.
count
Jumlah IVirtualProcessorRoot antarmuka dalam array.
Keterangan
Resource Manager memanggil metode RemoveVirtualProcessors untuk mengambil kembali sekumpulan akar prosesor virtual dari scheduler. Penjadwal diharapkan untuk memanggil metode Remove pada setiap antarmuka setelah selesai dengan akar prosesor virtual. Jangan gunakan antarmuka IVirtualProcessorRoot setelah Anda memanggil metode Remove padanya.
Parameter ppVirtualProcessorRoots menunjuk ke array antarmuka. Di antara set akar prosesor virtual yang akan dihapus, akar yang 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 kelebihan alokasi 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