Bagikan melalui


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 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.

Baca juga

Namespace layanan konkurensi
Struktur IScheduler
Struktur IThreadProxy
Struktur IVirtualProcessorRoot
Struktur IResourceManager