Struktur ISchedulerProxy
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 MinConcurrency
kebijakan , 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.
Baca juga
Namespace layanan konkurensi
Struktur IScheduler
Struktur IThreadProxy
Struktur IVirtualProcessorRoot
Struktur IResourceManager
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk