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 tempat penjadwal berkomunikasi dengan Resource Manager Concurrency Runtime untuk menegosiasikan alokasi sumber daya.
Sintaks
struct ISchedulerProxy;
Anggota
Metode Publik
| Nama | Deskripsi |
|---|---|
| ISchedulerProxy::BindContext | Mengaitkan konteks eksekusi dengan proksi utas, jika belum terkait dengannya. |
| ISchedulerProxy::CreateOversubscriber | Membuat akar prosesor virtual baru pada utas perangkat keras yang terkait dengan sumber daya eksekusi yang ada. |
| ISchedulerProxy::RequestInitialVirtualProcessors | Meminta alokasi awal akar prosesor virtual. Setiap akar prosesor virtual mewakili kemampuan untuk menjalankan satu utas yang dapat melakukan pekerjaan untuk penjadwal. |
| ISchedulerProxy::Shutdown | Memberi tahu Resource Manager bahwa penjadwal dimatikan. Ini akan menyebabkan Resource Manager segera mengklaim kembali semua sumber daya yang diberikan kepada penjadwal. |
| ISchedulerProxy::SubscribeCurrentThread | Mendaftarkan utas saat ini dengan Resource Manager, mengaitkannya dengan penjadwal ini. |
| ISchedulerProxy::UnbindContext | Memisahkan proksi utas dari konteks eksekusi yang ditentukan oleh pContext parameter dan mengembalikannya ke kumpulan gratis pabrik proksi utas. Metode ini hanya dapat dipanggil pada konteks eksekusi yang terikat melalui metode ISchedulerProxy::BindContext dan belum dimulai melalui menjadi pContext parameter panggilan metode IThreadProxy::SwitchTo . |
Keterangan
Resource Manager menyerahkan ISchedulerProxy antarmuka ke setiap penjadwal yang mendaftar dengannya menggunakan metode IResourceManager::RegisterScheduler .
Hierarki Warisan
ISchedulerProxy
Persyaratan
Header: concrtrm.h
Namespace: konkurensi
Metode ISchedulerProxy::BindContext
Mengaitkan konteks eksekusi dengan proksi utas, jika belum terkait dengannya.
virtual void BindContext(_Inout_ IExecutionContext* pContext) = 0;
Parameter
pContext
Antarmuka ke konteks eksekusi untuk dikaitkan dengan proksi utas.
Keterangan
Biasanya, metode IThreadProxy::SwitchTo akan mengikat proksi utas ke konteks eksekusi sesuai permintaan. Namun, ada keadaan di mana perlu untuk mengikat konteks terlebih dahulu untuk memastikan bahwa SwitchTo metode beralih ke konteks yang sudah terikat. Ini adalah kasus pada konteks penjadwalan UMS karena tidak dapat memanggil metode yang mengalokasikan memori, dan mengikat proksi utas dapat melibatkan alokasi memori jika proksi utas tidak tersedia di kumpulan gratis pabrik proksi utas.
invalid_argument dilemparkan jika parameter pContext memiliki nilai NULL.
Metode ISchedulerProxy::CreateOversubscriber
Membuat akar prosesor virtual baru pada utas perangkat keras yang terkait dengan sumber daya eksekusi yang ada.
virtual IVirtualProcessorRoot* CreateOversubscriber(_Inout_ IExecutionResource* pExecutionResource) = 0;
Parameter
pExecutionResource
Antarmuka IExecutionResource yang mewakili utas perangkat keras yang ingin Anda alihkan langganannya.
Tampilkan Nilai
Antarmuka IVirtualProcessorRoot .
Keterangan
Gunakan metode ini ketika penjadwal Anda ingin melakukan oversubscribe utas perangkat keras tertentu untuk waktu yang terbatas. Setelah selesai dengan akar prosesor virtual, Anda harus mengembalikannya ke manajer sumber daya dengan memanggil metode Hapus pada IVirtualProcessorRoot antarmuka.
Anda bahkan dapat berlangganan akar prosesor virtual yang ada, karena IVirtualProcessorRoot antarmuka mewarisi dari IExecutionResource antarmuka.
Metode ISchedulerProxy::RequestInitialVirtualProcessors
Meminta alokasi awal akar prosesor virtual. Setiap akar prosesor virtual mewakili kemampuan untuk menjalankan satu utas yang dapat melakukan pekerjaan untuk penjadwal.
virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;
Parameter
doSubscribeCurrentThread
Apakah akan berlangganan utas saat ini dan memperhitungkannya selama alokasi sumber daya.
Tampilkan Nilai
Antarmuka IExecutionResource untuk utas saat ini, jika parameter doSubscribeCurrentThread memiliki nilai true. Jika nilainya adalah false, metode mengembalikan NULL.
Keterangan
Sebelum penjadwal menjalankan pekerjaan apa pun, penjadwal harus menggunakan metode ini untuk meminta akar prosesor virtual dari Resource Manager. Resource Manager akan mengakses kebijakan penjadwal menggunakan IScheduler::GetPolicy dan menggunakan nilai untuk kunci MinConcurrencykebijakan , MaxConcurrency dan TargetOversubscriptionFactor untuk menentukan berapa banyak utas perangkat keras yang ditetapkan ke penjadwal pada awalnya dan berapa banyak akar prosesor virtual yang akan dibuat untuk setiap utas perangkat keras. Untuk informasi selengkapnya tentang bagaimana kebijakan penjadwal digunakan untuk menentukan alokasi awal penjadwal, lihat PolicyElementKey.
Resource Manager memberikan sumber daya kepada penjadwal dengan memanggil metode IScheduler::AddVirtualProcessors dengan daftar akar prosesor virtual. Metode ini dipanggil sebagai panggilan balik ke penjadwal sebelum metode ini kembali.
Jika penjadwal meminta langganan untuk utas saat ini dengan mengatur parameter doSubscribeCurrentThread ke true, metode mengembalikan IExecutionResource antarmuka. Langganan harus dihentikan di titik selanjutnya dengan menggunakan metode IExecutionResource::Remove .
Saat menentukan utas perangkat keras mana yang dipilih, Resource Manager akan mencoba mengoptimalkan afinitas simpul prosesor. Jika langganan diminta untuk utas saat ini, itu adalah indikasi bahwa utas saat ini ingin berpartisipasi dalam pekerjaan yang ditetapkan ke penjadwal ini. Dalam kasus seperti itu, akar prosesor virtual yang dialokasikan terletak pada simpul prosesor tempat utas saat ini dijalankan, jika memungkinkan.
Tindakan berlangganan utas meningkatkan tingkat langganan utas perangkat keras yang mendasarinya satu per satu. Tingkat langganan dikurangi satu per satu saat langganan dihentikan. Untuk informasi selengkapnya tentang tingkat langganan, lihat IExecutionResource::CurrentSubscriptionLevel.
ISchedulerProxy::Metode Matikan
Memberi tahu Resource Manager bahwa penjadwal dimatikan. Ini akan menyebabkan Resource Manager segera mengklaim kembali semua sumber daya yang diberikan kepada penjadwal.
virtual void Shutdown() = 0;
Keterangan
Semua IExecutionContext antarmuka yang diterima penjadwal sebagai akibat dari berlangganan utas ISchedulerProxy::RequestInitialVirtualProcessors eksternal menggunakan metode atau ISchedulerProxy::SubscribeCurrentThread harus dikembalikan ke Resource Manager menggunakan IExecutionResource::Remove sebelum penjadwal dimatikan sendiri.
Jika penjadwal Anda memiliki akar prosesor virtual yang dinonaktifkan, Anda harus mengaktifkannya menggunakan IVirtualProcessorRoot::Activate, dan meminta proksi utas yang dijalankan pada mereka meninggalkan Dispatch metode konteks eksekusi yang dikirim sebelum Anda memanggil Shutdown proksi penjadwal.
Penjadwal tidak perlu mengembalikan semua akar prosesor virtual yang diberikan Resource Manager melalui panggilan ke Remove metode karena semua akar prosesor virtual akan dikembalikan ke Resource Manager saat dimatikan.
Metode ISchedulerProxy::SubscribeCurrentThread
Mendaftarkan utas saat ini dengan Resource Manager, mengaitkannya dengan penjadwal ini.
virtual IExecutionResource* SubscribeCurrentThread() = 0;
Tampilkan Nilai
IExecutionResource Interfacing yang mewakili utas saat ini dalam runtime.
Keterangan
Gunakan metode ini jika Anda ingin Resource Manager memperhitungkan utas saat ini sambil mengalokasikan sumber daya ke penjadwal dan penjadwal lainnya. Ini sangat berguna ketika utas berencana untuk berpartisipasi dalam pekerjaan yang diantrekan ke penjadwal Anda, bersama dengan akar prosesor virtual yang diterima penjadwal dari Resource Manager. Resource Manager menggunakan informasi untuk mencegah oversubscription utas perangkat keras yang tidak perlu pada sistem.
Sumber daya eksekusi yang diterima melalui metode ini harus dikembalikan ke Resource Manager menggunakan metode IExecutionResource::Remove . Utas yang memanggil metode harus sama dengan utas Remove yang sebelumnya disebut SubscribeCurrentThread metode .
Tindakan berlangganan utas meningkatkan tingkat langganan utas perangkat keras yang mendasarinya satu per satu. Tingkat langganan dikurangi satu per satu saat langganan dihentikan. Untuk informasi selengkapnya tentang tingkat langganan, lihat IExecutionResource::CurrentSubscriptionLevel.
Metode ISchedulerProxy::UnbindContext
Memisahkan proksi utas dari konteks eksekusi yang ditentukan oleh pContext parameter dan mengembalikannya ke kumpulan gratis pabrik proksi utas. Metode ini hanya dapat dipanggil pada konteks eksekusi yang terikat melalui metode ISchedulerProxy::BindContext dan belum dimulai melalui menjadi pContext parameter panggilan metode IThreadProxy::SwitchTo .
virtual void UnbindContext(_Inout_ IExecutionContext* pContext) = 0;
Parameter
pContext
Konteks eksekusi untuk memisahkan diri dari proksi utasnya.
Lihat juga
Namespace layanan konkurensi
Struktur IScheduler
Struktur IThreadProxy
Struktur IVirtualProcessorRoot
Struktur IResourceManager