Eşzamanlılık Çalışma Zamanı Modülü'ne genel bakış
Bu belge eşzamanlılık çalışma zamanı genel bir bakış sağlar. Eşzamanlılık Çalışma zamanı avantajlarını açıklar ne zaman kullanılmalı ve işletim sistemi ve uygulamalar ile ve birbirleriyle nasıl etkileşim kurduklarını bileşenlerinden.
Bölümler
Bu belge aşağıdaki bölümleri içerir:
Bir çalışma zamanı eşzamanlılık için neden önemli olduğunu
Mimari
c++ Lambda ifadeleri
Gereksinimler
Bir çalışma zamanı eşzamanlılık için neden önemli olduğunu
Bir eşzamanlılık çalışma zamanı modülü bütünleşmesini ve öngörülebilirlik uygulamaları ve aynı anda çalışan uygulama bileşenleri sağlar. Eşzamanlılık Çalışma zamanı faydaları iki örnekler işbirlikçi görev zamanlamasını ve işbirlikçi engelleme.
Eşzamanlılık Çalışma zamanı verimli bir şekilde çalışma kaynakları bilgisayar arasında dağıtmak için bir iş çalarak algoritma uygulayan bir işbirlikçi Görev Zamanlayıcısı'nı kullanır. Örneğin, her ikisi de aynı çalışma zamanı tarafından yönetilen iki iş parçacığı olan bir uygulama göz önünde bulundurun. Bir iş parçacığı, zamanlanmış görev tamamlanırsa, iş başka bir iş parçacığından hafifletebilecek. Bu mekanizma uygulamanın genel iş yükünü dengeler.
Eşzamanlılık Çalışma zamanı kullanan işbirlikçi engelleme kaynaklara erişimi eşitlemek için eşitleme ilkel de sağlar. Örneğin, bir görev özel paylaşılan bir kaynağa erişimi olması gerekir düşünün. Çalışma zamanı cooperatively engelleyerek, ilk görev kaynak için beklediği gibi başka bir görev gerçekleştirmek için kalan hisse kullanabilirsiniz. Bu mekanizma, kaynak kullanımının en fazla kullanım yükseltir.
Top
Mimari
Eşzamanlılık Çalışma zamanı dört bileşenlerine ayrılır: paralel desen kitaplığı (ppl), zaman uyumsuz aracılar kitaplığı, Görev Zamanlayıcısı'nı ve Kaynak Yöneticisi. Bu bileşenler işletim sistemi ve uygulamalar arasında yer alır. Eşzamanlılık Çalışma zamanı bileşenleri işletim sistemi ve uygulamalar arasında nasıl etkileşimde bulunduğunu aşağıda gösterilmiştir:
Eşzamanlılık Çalışma zamanı mimarisi
Önemli
Görev Zamanlayıcı ve Kaynak Yöneticisi bileşenleri kullanılamaz bir Windows Mağazası app.
Eşzamanlılık Çalışma zamanı son derece olan birleştirilebilir, diğer bir deyişle, daha fazlasını yapmak için varolan işlevselliği birleştirebilirsiniz. Eşzamanlılık Çalışma Zamanı paralel algoritmalar, alt düzey bileşenlerinden gibi birçok özellik oluşturur.
Eşzamanlılık Çalışma zamanı kullanan işbirlikçi engelleme kaynaklara erişimi eşitlemek için eşitleme ilkel de sağlar. Bu eşitleme temel öğeler hakkında daha fazla bilgi için bkz: Eşitleme veri yapıları.
Aşağıdaki bölümler her bileşeni sağlar ne ve ne zaman kullanılmalı kısa bir genel bakış sağlar.
Paralel desen kitaplığı
Paralel desen kitaplığı (ppl) hassas paralellik gerçekleştirmek için genel amaçlı kapları ve algoritmaları sağlar. ppl sağlayan kesinlik temelli veri paralellik hesaplamaları koleksiyonları veya veri kümesi kaynakları bilgisayar üzerinden dağıtmak paralel algoritmalar sağlayarak. Ayrıca sağlar görev paralellik birden çok bağımsız işlemler bilgi işlem kaynakları arasında dağıtmak görev nesneleri sağlayarak.
Paralel yararlanırlar yerel bir hesaplama olduğunda paralel desen kitaplığı kullanın. Örneğin, kullanabileceğiniz concurrency::parallel_for dönüştüren varolan bir algoritma for döngü paralel olarak görev yapacak.
Paralel desen Kitaplığı hakkında daha fazla bilgi için bkz: Paralel Desenler kitaplığının (ppl).
Zaman uyumsuz aracılar kitaplığı
Zaman uyumsuz aracılar kitaplığı (veya yalnızca Aracılar kitaplığı) bir aktör tabanlı programlama modeli ve ileti geçirme kilitten veri akışı için arabirimler ve ardışık görevleri sağlar. Zaman uyumsuz aracılar üretken gecikme süresi, diğer bileşenler veriyi beklemek gibi iş gerçekleştirerek kullanmasına olanak sağlar.
Zaman uyumsuz olarak birbirleriyle iletişim kuran birden çok varlık varsa, aracılar kitaplığı kullanın. Örneğin, bir dosya veya ağ bağlantısından verileri okur ve sonra başka bir aracı için bu verileri göndermek için ileti arabirimleri kullanan bir Aracısı oluşturabilirsiniz.
Aracılar Kitaplığı hakkında daha fazla bilgi için bkz: Zaman uyumsuz aracıları kitaplığı.
Görev Zamanlayıcısı
Görev Zamanlayıcısı'nı zamanlar ve görevleri zamanında eşgüdüm sağlar. Görev Zamanlayıcı işbirlikçi ve işleme kaynaklarını en fazla kullanımı elde etmek için bir iş çalarak algoritması kullanır.
Eşzamanlılık Çalışma zamanı varsayılan Zamanlayıcı sunar, böylece altyapı ayrıntıları yönetmek zorunda değilsiniz. Ancak, uygulamanızın kalite gereksinimlerini karşılamak için de belirli görevler Zamanlama kendi ilke veya ilişkilendirin belirli planlayıcılar sağlayabilirsiniz.
Görev Zamanlayıcısı hakkında daha fazla bilgi için bkz: Görev Zamanlayıcı'yı (eşzamanlılık çalışma zamanı).
Kaynak Yöneticisi
Kaynak Yöneticisi'nin rol işlemci ve bellek gibi bilgisayar kaynakları yönetmektir. Kaynak Yöneticisi, bunlar çalışma zamanında burada bunlar en etkili olabilir için kaynakları atayarak değiştikçe iş yükleri için yanıt verir.
Kaynak Yöneticisi bilgi işlem kaynaklarını bir soyutlama hizmet verir ve öncelikle Görev Zamanlayıcısı ile etkileşime girer. Kitaplıklar ve uygulamaların performans ince ayarını yapmak için Kaynak Yöneticisi'ni kullanabilirsiniz, ancak genellikle paralel desen kitaplığı, aracılar kitaplığı ve Görev Zamanlayıcısı tarafından sağlanan işlevleri kullanın. Bu kitaplıklar, kaynakların iş yüklerini değiştikçe dinamik olarak yeniden dengelemek için Kaynak Yöneticisi'ni kullanın.
Top
c++ Lambda ifadeleri
Çoğu türü ve Eşzamanlılık Çalışma zamanı tarafından tanımlanan algoritmaları, c++ şablonları uygulanır. Bu türler ve algoritmaların bazıları çalışmayı gerçekleştiren bir yordam parametresi olarak alır. Bu parametre, lambda işlevi, işlev nesne veya işlev işaretçisi olabilir. Bu varlıklar, ayrıca olarak adlandırılır İş işlevleri veya yordamları çalışma.
Lambda ifadeleri önemli yeni Visual c++ dili özelliği olduklarından paralel işleme için iş işlevleri tanımlamak için Sözün bir yol sağlarlar. Function nesneleri ve işlev işaretçileri ile varolan kodunuzu eşzamanlılık çalışma zamanı kullanmanıza olanak verir. Ancak, sağladıkları güvenlik ve verimlilik avantajları nedeniyle yeni kod yazdığınızda, lambda ifadeleri kullanmanızı öneririz.
Aşağıdaki örnek sözdizimi lambda işlevleri, işlev nesneleri ve birden fazla işlev işaretçileri karşılaştırır concurrency::parallel_for_each algoritması. Her çağrı parallel_for_each her öğe, kare hesaplamak için farklı bir teknik kullanır bir std::array nesne.
// comparing-work-functions.cpp
// compile with: /EHsc
#include <ppl.h>
#include <array>
#include <iostream>
using namespace concurrency;
using namespace std;
// Function object (functor) class that computes the square of its input.
template<class Ty>
class SquareFunctor
{
public:
void operator()(Ty& n) const
{
n *= n;
}
};
// Function that computes the square of its input.
template<class Ty>
void square_function(Ty& n)
{
n *= n;
}
int wmain()
{
// Create an array object that contains 5 values.
array<int, 5> values = { 1, 2, 3, 4, 5 };
// Use a lambda function, a function object, and a function pointer to
// compute the square of each element of the array in parallel.
// Use a lambda function to square each element.
parallel_for_each(begin(values), end(values), [](int& n){n *= n;});
// Use a function object (functor) to square each element.
parallel_for_each(begin(values), end(values), SquareFunctor<int>());
// Use a function pointer to square each element.
parallel_for_each(begin(values), end(values), &square_function<int>);
// Print each element of the array to the console.
for_each(begin(values), end(values), [](int& n) {
wcout << n << endl;
});
}
Çıktı
C++'ta lambda işlevleri hakkında daha fazla bilgi için bkz: Lambda ifadeleri C++.
Top
Gereksinimler
Eşzamanlılık Çalışma zamanı her bileşenle ilişkili başlık dosyaları aşağıdaki tabloda gösterilmektedir:
Bileşen |
Başlık dosyaları |
---|---|
Paralel desen kitaplığı (ppl) |
ppl.h concurrent_queue.h concurrent_vector.h |
Zaman uyumsuz aracılar kitaplığı |
Agents.h |
Görev Zamanlayıcısı |
concrt.h |
Kaynak Yöneticisi |
concrtrm.h |
Eşzamanlılık Çalışma zamanı içinde bildirilen eşzamanlılık ad alanı. (Ayrıca eşzamanlılık, bu ad alanı için bir diğer ad değil.) concurrency::details Ad alanı eşzamanlılık çalışma zamanı framework destekler ve doğrudan sizin kodunuzdan kullanılmak üzere tasarlanmamıştır.
Eşzamanlılık Çalışma zamanı c çalışma zamanı kitaplığı (crt) bir parçası olarak sağlanır. crt kullanan bir uygulama oluşturma hakkında daha fazla bilgi için bkz: crt kitaplığı özellikleri.
Top