Aracılığıyla paylaş


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 SetDefaultSchedulerPolicygeri 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ı