Zamanlayıcı Örnekleri
Bu belgede Eşzamanlılık Çalışma Zamanı'ndaki zamanlayıcı örneklerinin rolü ve zamanlayıcı örneklerini oluşturmak ve yönetmek için eşzamanlılık::Scheduler ve eşzamanlılık::CurrentScheduler sınıflarının nasıl kullanılacağı açıklanmaktadır. Zamanlayıcı örnekleri, açık zamanlama ilkelerini belirli iş yükü türleriyle ilişkilendirmek istediğinizde kullanışlıdır. Örneğin, bazı görevleri yükseltilmiş iş parçacığı önceliğine göre çalıştırmak için bir zamanlayıcı örneği oluşturabilir ve diğer görevleri normal iş parçacığı önceliğine göre çalıştırmak için varsayılan zamanlayıcıyı kullanabilirsiniz.
İpucu
Eşzamanlılık Çalışma Zamanı varsayılan bir zamanlayıcı sağlar ve bu nedenle uygulamanızda bir zamanlayıcı oluşturmanız gerekmez. Görev Zamanlayıcı, uygulamalarınızın performansında ince ayarlamalar yapmanızı sağladığından Eşzamanlılık Çalışma Zamanı'nı kullanmaya yeni başladıysanız Paralel Desenler Kitaplığı (PPL) veya Zaman Uyumsuz Aracılar Kitaplığı ile başlamanızı öneririz.
Bölümler
Scheduler ve CurrentScheduler Sınıfları
Görev Zamanlayıcı, uygulamaların çalışmayı zamanlamak için bir veya daha fazla zamanlayıcı örneği kullanmasına olanak tanır. concurrency::Scheduler sınıfı bir zamanlayıcı örneğini temsil eder ve zamanlama görevleriyle ilgili işlevselliği kapsüller.
Zamanlayıcıya bağlı bir iş parçacığı yürütme bağlamı veya yalnızca bağlam olarak bilinir. Geçerli bağlamda herhangi bir zamanda bir zamanlayıcı etkin olabilir. Etkin zamanlayıcı, geçerli zamanlayıcı olarak da bilinir. Eşzamanlılık Çalışma Zamanı, geçerli zamanlayıcıya erişim sağlamak için eşzamanlılık::CurrentScheduler sınıfını kullanır. Bir bağlam için geçerli zamanlayıcı, başka bir bağlam için geçerli zamanlayıcıdan farklı olabilir. Çalışma zamanı geçerli zamanlayıcının işlem düzeyi gösterimini sağlamaz.
Genellikle sınıfı geçerli CurrentScheduler
zamanlayıcıya erişmek için kullanılır. Sınıfı Scheduler
, geçerli olmayan bir zamanlayıcıyı yönetmeniz gerektiğinde kullanışlıdır.
Aşağıdaki bölümlerde bir zamanlayıcı örneğinin nasıl oluşturulacağı ve yönetileceğini açıklanmaktadır. Bu görevleri gösteren eksiksiz bir örnek için bkz . Nasıl yapılır: Zamanlayıcı Örneğini Yönetme.
[Üst]
Zamanlayıcı Örneği Oluşturma
Nesne oluşturmanın Scheduler
şu üç yolu vardır:
Zamanlayıcı yoksa, çalışma zamanı işlevini (paralel algoritma gibi) kullanarak iş gerçekleştirdiğinizde çalışma zamanı sizin için varsayılan bir zamanlayıcı oluşturur. Varsayılan zamanlayıcı, paralel çalışmayı başlatan bağlam için geçerli zamanlayıcı olur.
eşzamanlılık::CurrentScheduler::Create yöntemi, belirli bir ilkeyi kullanan ve
Scheduler
bu zamanlayıcıyı geçerli bağlamla ilişkilendiren bir nesne oluşturur.concurrency::Scheduler::Create yöntemi, belirli bir
Scheduler
ilkeyi kullanan ancak geçerli bağlamla ilişkilendirmeyen bir nesne oluşturur.
Çalışma zamanının varsayılan bir zamanlayıcı oluşturmasına izin vermek, tüm eşzamanlı görevlerin aynı zamanlayıcıyı paylaşmasına olanak tanır. Genellikle Paralel Desenler Kitaplığı (PPL) veya Zaman Uyumsuz Aracılar Kitaplığı tarafından sağlanan işlevsellik paralel çalışma gerçekleştirmek için kullanılır. Bu nedenle, ilkesini veya ömrünü denetlemek için doğrudan zamanlayıcıyla çalışmanız gerekmez. PPL veya Aracılar Kitaplığı'nı kullandığınızda, çalışma zamanı yoksa varsayılan zamanlayıcıyı oluşturur ve her bağlam için geçerli zamanlayıcı yapar. Bir zamanlayıcı oluşturduğunuzda ve bunu geçerli zamanlayıcı olarak ayarladığınızda, çalışma zamanı görevleri zamanlamak için bu zamanlayıcıyı kullanır. Yalnızca belirli bir zamanlama ilkesine ihtiyacınız olduğunda ek zamanlayıcı örnekleri oluşturun. Bir zamanlayıcıyla ilişkili ilkeler hakkında daha fazla bilgi için bkz . Zamanlayıcı İlkeleri.
[Üst]
Zamanlayıcı Örneğinin Ömrünü Yönetme
Çalışma zamanı, nesnelerin ömrünü Scheduler
denetlemek için bir başvuru sayma mekanizması kullanır.
Bir Scheduler
nesne oluşturmak için yöntemini veya Scheduler::Create
yöntemini kullandığınızdaCurrentScheduler::Create
, çalışma zamanı bu zamanlayıcının ilk başvuru sayısını bir olarak ayarlar. eşzamanlılık::Scheduler::Attach yöntemini çağırdığınızda çalışma zamanı başvuru sayısını artırır. yöntemiScheduler
, Scheduler::Attach
nesneyi geçerli bağlamla ilişkilendirir. Bu, geçerli zamanlayıcı yapar. yöntemini çağırdığınızda CurrentScheduler::Create
, çalışma zamanı hem bir Scheduler
nesne oluşturur hem de geçerli bağlama ekler (ve başvuru sayısını bir olarak ayarlar). Bir nesnenin başvuru sayısını Scheduler
artırmak için eşzamanlılık::Scheduler::Reference yöntemini de kullanabilirsiniz.
Geçerli zamanlayıcıyı ayırmak için eşzamanlılık::CurrentScheduler::D etach yöntemini çağırdığınızda veya eşzamanlılık::Scheduler::Release yöntemini çağırdığınızda çalışma zamanı başvuru sayısını azalmış olur. Başvuru sayısı sıfıra ulaştığında, çalışma zamanı tüm zamanlanmış görevler tamamlandıktan sonra nesneyi yok eder Scheduler
. Çalışan bir görevin geçerli zamanlayıcının başvuru sayısını artırmasına izin verilir. Bu nedenle, başvuru sayısı sıfıra ulaşırsa ve bir görev başvuru sayısını artırırsa, başvuru sayısı yeniden sıfıra ulaşana ve tüm görevler bitene kadar çalışma zamanı nesneyi yok Scheduler
etmez.
Çalışma zamanı, her bağlam için bir iç nesne yığını Scheduler
tutar. veya CurrentScheduler::Create
yöntemini çağırdığınızdaScheduler::Attach
, çalışma zamanı geçerli bağlam için bu Scheduler
nesneyi yığına gönderir. Bu, geçerli zamanlayıcı yapar. çağırdığınızda CurrentScheduler::Detach
, çalışma zamanı geçerli bağlam için geçerli zamanlayıcıyı yığından açar ve öncekini geçerli zamanlayıcı olarak ayarlar.
Çalışma zamanı, bir zamanlayıcı örneğinin ömrünü yönetmek için çeşitli yollar sağlar. Aşağıdaki tabloda, geçerli bağlama bir zamanlayıcı oluşturan veya ekleyen her yöntem için zamanlayıcıyı geçerli bağlamdan serbest bırakan veya ayıran uygun yöntem gösterilmektedir.
Oluşturma veya ekleme yöntemi | Release veya detach yöntemi |
---|---|
CurrentScheduler::Create |
CurrentScheduler::Detach |
Scheduler::Create |
Scheduler::Release |
Scheduler::Attach |
CurrentScheduler::Detach |
Scheduler::Reference |
Scheduler::Release |
Uygun olmayan sürüm veya ayırma yöntemini çağırmak çalışma zamanında belirtilmeyen davranışlar üretir.
Çalışma zamanının sizin için varsayılan zamanlayıcıyı oluşturmasına neden olan PPL gibi işlevleri kullandığınızda, bu zamanlayıcıyı serbest bırakmayın veya ayırmayın. Çalışma zamanı, oluşturduğu herhangi bir zamanlayıcının ömrünü yönetir.
Çalışma zamanı tüm görevler tamamlanmadan önce bir Scheduler
nesneyi yok etmediğinden, bir nesne yok edildiğinde Scheduler
bildirim almak için eşzamanlılık::Scheduler::RegisterShutdownEvent yöntemini veya eşzamanlılık::CurrentScheduler::RegisterShutdownEvent yöntemini kullanabilirsiniz. Bu, bir Scheduler
nesne tarafından zamanlanan her görevin tamamlanmasını beklemeniz gerektiğinde yararlıdır.
[Üst]
Yöntemler ve Özellikler
Bu bölümde ve Scheduler
sınıflarının önemli yöntemleri özetlemektedirCurrentScheduler
.
sınıfını CurrentScheduler
geçerli bağlamda kullanmak üzere bir zamanlayıcı oluşturmak için yardımcı olarak düşünün. sınıfı, Scheduler
başka bir bağlama ait bir zamanlayıcıyı denetlemenize olanak tanır.
Aşağıdaki tabloda sınıfı tarafından CurrentScheduler
tanımlanan önemli yöntemler gösterilmektedir.
Metot | Açıklama |
---|---|
Oluştur | Belirtilen ilkeyi kullanan ve geçerli bağlamla ilişkilendiren bir Scheduler nesne oluşturur. |
Edinin | Geçerli bağlamla ilişkili nesneye Scheduler yönelik bir işaretçi alır. Bu yöntem nesnenin başvuru sayısını Scheduler artırmaz. |
Detach | Geçerli zamanlayıcıyı geçerli bağlamdan ayırır ve öncekini geçerli zamanlayıcı olarak ayarlar. |
RegisterShutdownEvent | Geçerli zamanlayıcı yok edildiğinde çalışma zamanının ayarlandığı bir olayı kaydeder. |
CreateScheduleGroup | Geçerli zamanlayıcıda bir concurrency::ScheduleGroup nesnesi oluşturur. |
ScheduleTask | Geçerli zamanlayıcının zamanlama kuyruğuna basit bir görev ekler. |
GetPolicy | Geçerli zamanlayıcıyla ilişkili ilkenin bir kopyasını alır. |
Aşağıdaki tabloda sınıfı tarafından Scheduler
tanımlanan önemli yöntemler gösterilmektedir.
Metot | Açıklama |
---|---|
Oluştur | Belirtilen ilkeyi kullanan bir Scheduler nesne oluşturur. |
Attach | Scheduler Nesneyi geçerli bağlamla ilişkilendirir. |
Başvuru | Nesnenin başvuru sayacını Scheduler artırır. |
Sürüm | Nesnenin başvuru sayacını Scheduler azaltma. |
RegisterShutdownEvent | Nesne yok edildiğinde çalışma zamanının ayarlı Scheduler olduğu bir olayı kaydeder. |
CreateScheduleGroup | nesnesinde Scheduler bir concurrency::ScheduleGroup nesnesi oluşturur. |
ScheduleTask | Nesneden Scheduler basit bir görev zamanlar. |
GetPolicy | nesnesiyle Scheduler ilişkili ilkenin bir kopyasını alır. |
SetDefaultSchedulerPolicy | Çalışma zamanının varsayılan zamanlayıcıyı oluştururken kullandıracak ilkesini ayarlar. |
ResetDefaultSchedulerPolicy | Varsayılan ilkeyi çağrısından önce etkin olan ilkeye SetDefaultSchedulerPolicy geri yükler. Bu çağrıdan sonra varsayılan zamanlayıcı oluşturulursa, çalışma zamanı zamanlayıcıyı oluşturmak için varsayılan ilke ayarlarını kullanır. |
[Üst]
Örnek
Zamanlayıcı örneği oluşturma ve yönetme hakkında temel örnekler için bkz . Nasıl yapılır: Zamanlayıcı Örneğini Yönetme.
Ayrıca bkz.
Görev Zamanlayıcı
Nasıl yapılır: Zamanlayıcı Örneğini Yönetme
Scheduler İlkeleri
Zamanlama Grupları