Bagikan melalui


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