Bağlamları
Bu belge içerikleri eşzamanlılık çalışma zamanında açıklar. Bir iş parçacığı için bir Zamanlayıcı bağlı olarak bilinen bir yürütme içeriği, ya da sadece İçerik. Concurrency::wait işlevi ve concurrency::Context sınıf içerikleri davranışını denetlemek etkinleştirin. Use wait işlevi, geçerli içerik belirli bir süre için askıya almak. Use Context ne zaman içerikleri engellemek, engellemesini ve ödeme veya geçerli içerik oversubscribe istediğinizde daha fazla denetime gereksinim duyduğunuzda sınıf.
İpucu
Bu nedenle, uygulamanızı oluşturmak için gerekli değildir ve varsayılan Zamanlayıcı eşzamanlılık çalışma zamanı sağlar.Görev Zamanlayıcı, uygulamalarınızın performansını hassas yardımcı olur çünkü ile başlatmanızı öneririz Paralel Desenler kitaplığının (ppl) veya Zaman uyumsuz aracıları kitaplığı eşzamanlılık çalýþma yeniyseniz.
Bekleme fonksiyonu
Concurrency::wait işlevi, belirtilen milisaniye sayısı için geçerli içerik yürütme cooperatively üretir. Çalýþma verimini zaman diğer görevleri gerçekleştirmek için kullanır. Belirtilen süre geçtikten sonra çalışma zamanı yürütme içeriği reschedules. Bu nedenle, wait işlevi için verilen değerden daha uzun geçerli içerik askıya milliseconds parametresi.
0 (Sıfır) geçirmekten milliseconds parametresi geçerli içerikteki tüm etkin içerik iş yapma fırsatı verilir kadar askıya almak çalışma zamanı neden olur. Bu, tüm etkin görevleri görev verim sağlar.
Örnek
Kullanan bir örnek için wait geçerli içerik verim için işlev ve böylece diğer içerikleri çalıştırmak için bkz: izin Nasıl yapılır: yürütme sırasını belirlemek için zamanlama grupları kullanma.
İçerik sınıfı
Concurrency::Context sınıfı için yürütme içeriği programlama bir soyutlama sağlar ve iki önemli özellik sunar: cooperatively engellemek engelini kaldırmak ve geçerli içerik verim yeteneği ve geçerli içerik oversubscribe yeteneği.
İşbirliği yapan engelleme
Context Sınıfı, engellemek veya geçerli yürütme içeriği verim sağlar. Geçerli içerik bir kaynak olmadığı için devam edemiyor engelleme veya istediðinde yararlıdır.
Concurrency::Context::Block yöntemi, geçerli içerik engeller. Böylece çalışma zamanı başka görevler gerçekleştirebilir, engellenen içerik işleme kaynaklarını üretir. Concurrency::Context::Unblock yöntemi, engellenen içerik engelini kaldırır. Context::Unblock Yönteminin çağrıldığı, adlı olandan farklı içeriğinden Context::Block. Çalışma zamanı yaratmaz concurrency::context_self_unblock bir içerik kendisini engelini çalışırsa.
Cooperatively engellemek ve bir içerik engelini kaldırmak için genellikle arama concurrency::Context::CurrentContext işaretçisi almak için Context sonucu kaydetmek ve geçerli iş parçacığı ile ilişkili bir nesne. Sonra arama Context::Block geçerli içerik engelleme yöntemi. Daha sonra çağrı Context::Unblock ayrı içeriğinden engellenen içerik engelini kaldırmak için.
Yapılan her çifti eşleşmelidir Context::Block ve Context::Unblock. Çalışma zamanı yaratmaz concurrency::context_unblock_unbalanced , Context::Block veya Context::Unblock yöntemi çağrılır birbiri ardına eşleşen başka bir yöntem çağrısı yapmadan. Ancak, arama yoktur Context::Block , aramadan önce Context::Unblock. Örneğin, bir içerik çağırır, Context::Unblock önce başka bir içerik aramaları Context::Block aynı içerik için o içerik engellenmemiş kalır.
Concurrency::Context::Yield yöntemi, böylece çalışma zamanı diğer görevleri yapma ve yürütme içeriği yeniden zamanla yürütme üretir. Aradığınızda Context::Block yöntemi, Çalışma Zamanı Modülü içeriği yeniden zamanla değil.
Örnek
Kullanan bir örnek için Context::Block, Context::Unblock, ve Context::Yield bir işbirliği yapan semafor sınıfı uygulamak için bkz Nasıl yapılır: işbirlikçi bir semafor uygulamak için içerik sınıfını kullanın.
Oversubscription
Kullanılabilir donanım iş parçacıkları gibi varsayılan Zamanlayıcı aynı iş parçacığı sayısını oluşturur. Kullanabileceğiniz oversubscription verilen donanım iş parçacığı için ek iş parçacığı oluşturmak için.
Yoğun hesaplama işlemleri için ek yük getirir, çünkü oversubscription genellikle ölçeklenmez. Ancak, gecikme süresi yüksek miktarda sahip görevler için örneğin, disk ya da bir ağ bağlantısı veri okuma oversubscription bazı uygulamalar genel verimliliğini artırabilirsiniz.
Not
Eşzamanlılık çalışma zamanı tarafından oluşturulmuş olan yalnızca bir iş parçacığından oversubscription etkinleştirin.(Ana iş parçacığı dahil) çalışma zamanı tarafından oluşturulmamış bir iş parçacığından Çağrıldığında oversubscription etkisi yoktur.
Geçerli bağlamda oversubscription etkinleştirmek için arama concurrency::Context::Oversubscribe yöntemi ile _BeginOversubscription parametresini ayarlamak true. Oversubscription eşzamanlılık çalışma zamanı tarafından oluşturulmuş bir iş parçacığında etkinleştirdiğinizde, bir ek iş parçacığı oluşturmak çalışma zamanı neden olur. Oversubscription son gerektiren tüm görevleri sonra çağrı Context::Oversubscribe ile _BeginOversubscription parametresini ayarlamak false.
Oversubscription birden çok kez geçerli içerikten etkinleştirebilirsiniz, ancak etkinleştirmeniz aynı sayıda devre gerekir. Oversubscription de iç içe; yani, oversubscription kullanan başka bir görev tarafından oluşturulan görev onun içeriği de oversubscribe. Ancak hem üst, hem de iç içe görev aynı içeriği, yalnızca dıştaki çağrısına ait, Context::Oversubscribe ek bir iş parçacığı oluşturulmasına neden olur.
Not
Çalışma zamanı yaratmaz concurrency::invalid_oversubscribe_operation oversubscription etkin önce devre dışı.
Örnek
Bir ağ bağlantısından veri okuyarak neden gecikme kaydırmak için oversubscription kullanan bir örnek için bkz: Nasıl yapılır: gecikme kaydırmak için Oversubscription kullanın.
Ayrıca bkz.
Görevler
Nasıl yapılır: yürütme sırasını belirlemek için zamanlama grupları kullanma
Nasıl yapılır: işbirlikçi bir semafor uygulamak için içerik sınıfını kullanın
Nasıl yapılır: gecikme kaydırmak için Oversubscription kullanın