Eşzamanlılık Çalışma Zamanına Genel Bakış
Bu belge Eşzamanlılık Çalışma Zamanı'na genel bir bakış sağlar. Eşzamanlılık Çalışma Zamanı'nın avantajlarını, ne zaman kullanılacağını ve bileşenlerinin birbirleriyle ve işletim sistemi ve uygulamalarla nasıl etkileşime geçtiğini açıklar.
Bölümler
Bu belgede aşağıdaki bölümler yer alır:
Eşzamanlılık Çalışma Zamanı uygulama geçmişi
Visual Studio 2010 ile 2013 arasında Eşzamanlılık Çalışma Zamanı, msvcr120.dll aracılığıyla msvcr100.dll içinde birleştirilmiştir. Visual Studio 2015'te UCRT yeniden düzenlemesi gerçekleştiğinde, bu DLL üç bölümde yeniden düzenlenmişti:
ucrtbase.dll – Windows 10'da gönderilen ve Windows Update aracılığıyla hizmet düzeyi düşürülen C API'si-
vcruntime140.dll – Visual Studio aracılığıyla gönderilen derleyici destek işlevleri ve EH çalışma zamanı
concrt140.dll – Eşzamanlılık Çalışma Zamanı, Visual Studio aracılığıyla gönderilir. gibi
concurrency::parallel_for
paralel kapsayıcılar ve algoritmalar için gereklidir. Ayrıca STL, Windows XP'de bu DLL'nin eşitleme temel öğelerini desteklemesini gerektirir çünkü Windows XP'de koşul değişkenleri yoktur.
Visual Studio 2015 ve sonraki sürümlerde Eşzamanlılık Çalışma Zamanı Görev Zamanlayıcı artık görev sınıfı ve ppltasks.h içindeki ilgili türler için zamanlayıcı değildir. Bu türler artık Windows eşitleme temel bilgileriyle daha iyi performans ve birlikte çalışabilirlik için Windows ThreadPool'u kullanıyor.
Eşzamanlılık için Çalışma Zamanı Neden Önemlidir?
Eşzamanlılık için çalışma zamanı, aynı anda çalışan uygulamalara ve uygulama bileşenlerine tekdüzenlik ve öngörülebilirlik sağlar. Eşzamanlılık Çalışma Zamanı'nın iki avantajı, işbirliğine dayalı görev zamanlaması ve işbirliğine dayalı engellemedir.
Eşzamanlılık Çalışma Zamanı, işi bilgi işlem kaynakları arasında verimli bir şekilde dağıtmak için bir iş çalma algoritması uygulayan işbirliğine dayalı bir görev zamanlayıcı kullanır. Örneğin, her ikisi de aynı çalışma zamanı tarafından yönetilen iki iş parçacığına sahip bir uygulama düşünün. Bir iş parçacığı zamanlanmış görevini tamamlarsa, işi diğer iş parçacığından boşaltabilir. Bu mekanizma, uygulamanın genel iş yükünü dengeler.
Eşzamanlılık Çalışma Zamanı, kaynaklara erişimi eşitlemek için ortak engelleme kullanan eşitleme temel öğelerini de sağlar. Örneğin, paylaşılan kaynağa özel erişime sahip olması gereken bir görevi düşünün. İşbirlikçi olarak engelleyerek, çalışma zamanı kalan kuantumu kullanarak ilk görev kaynağı beklerken başka bir görev gerçekleştirebilir. Bu mekanizma, bilgi işlem kaynaklarının maksimum kullanımını teşvik eder.
[Üst]
Mimari
Eşzamanlılık Çalışma Zamanı dört bileşene ayrılır: Paralel Desenler Kitaplığı (PPL), Zaman Uyumsuz Aracılar Kitaplığı, Görev Zamanlayıcı ve Resource Manager. Bu bileşenler işletim sistemi ve uygulamalar arasında yer alır. Aşağıdaki çizimde Eşzamanlılık Çalışma Zamanı bileşenlerinin işletim sistemi ve uygulamalar arasında nasıl etkileşimde olduğu gösterilmektedir:
Eşzamanlılık Çalışma Zamanı Mimarisi
Önemli
Görev Zamanlayıcı ve Resource Manager bileşenleri bir Evrensel Windows Platformu (UWP) uygulamasından veya ppltasks.h dosyasında görev sınıfını veya diğer türleri kullandığınızda kullanılamaz.
Eşzamanlılık Çalışma Zamanı yüksek oranda birleştirilebilir, yani daha fazlasını yapmak için mevcut işlevleri birleştirebilirsiniz. Eşzamanlılık Çalışma Zamanı, alt düzey bileşenlerden paralel algoritmalar gibi birçok özellik oluşturur.
Eşzamanlılık Çalışma Zamanı, kaynaklara erişimi eşitlemek için ortak engelleme kullanan eşitleme temel öğelerini de sağlar. Bu eşitleme temel bilgileri hakkında daha fazla bilgi için bkz . Eşitleme Veri Yapıları.
Aşağıdaki bölümlerde, her bileşenin ne sağladığına ve ne zaman kullanılacağına ilişkin kısa bir genel bakış sağlanır.
Paralel Desen Kitaplığı
Paralel Desenler Kitaplığı (PPL), ayrıntılı paralellik gerçekleştirmek için genel amaçlı kapsayıcılar ve algoritmalar sağlar. PPL, hesaplamaları koleksiyonlara veya bilgi işlem kaynakları arasında veri kümelerine dağıtan paralel algoritmalar sağlayarak kesinlik temelli veri paralelliği sağlar. Ayrıca, işlem kaynakları arasında birden çok bağımsız işlemi dağıtan görev nesneleri sağlayarak görev paralelliğini etkinleştirir.
Paralel yürütmeden yararlanabilecek yerel bir hesaplamanız olduğunda Paralel Desenler Kitaplığı'nı kullanın. Örneğin, eşzamanlılık::p arallel_for algoritmasını kullanarak var olan for
bir döngünün paralel olarak hareket etmesi için dönüştürebilirsiniz.
Paralel Desenler Kitaplığı hakkında daha fazla bilgi için bkz . Paralel Desenler Kitaplığı (PPL).
Zaman Uyumsuz Aracılar Kitaplığı
Zaman Uyumsuz Aracılar Kitaplığı (veya yalnızca Aracılar Kitaplığı), hem aktör tabanlı bir programlama modeli hem de kaba ayrıntılı veri akışı ve kanal oluşturma görevleri için ileti geçirme arabirimleri sağlar. Zaman uyumsuz aracılar, diğer bileşenler verileri beklerken iş gerçekleştirerek gecikme süresini verimli bir şekilde kullanmanızı sağlar.
Birbiriyle zaman uyumsuz olarak iletişim kuran birden çok varlığınız olduğunda Aracılar Kitaplığı'nı kullanın. Örneğin, bir dosyadan veya ağ bağlantısından verileri okuyan ve ardından bu verileri başka bir aracıya göndermek için arabirimleri geçiren iletiyi kullanan bir aracı oluşturabilirsiniz.
Aracılar Kitaplığı hakkında daha fazla bilgi için bkz . Zaman Uyumsuz Aracılar Kitaplığı.
Görev Zamanlayıcı
Görev Zamanlayıcı, çalışma zamanında görevleri zamanlar ve düzenler. Görev Zamanlayıcı işbirliğine dayalıdır ve işleme kaynaklarının maksimum kullanımını elde etmek için bir iş çalma algoritması kullanır.
Eşzamanlılık Çalışma Zamanı, altyapı ayrıntılarını yönetmeniz gerekmemesi için varsayılan bir zamanlayıcı sağlar. Ancak, uygulamanızın kalite gereksinimlerini karşılamak için kendi zamanlama ilkenizi sağlayabilir veya belirli zamanlayıcıları belirli görevlerle ilişkilendirebilirsiniz.
Görev Zamanlayıcı hakkında daha fazla bilgi için bkz . Görev Zamanlayıcı.
Resource Manager
Resource Manager'ın rolü işlemciler ve bellek gibi bilgi işlem kaynaklarını yönetmektir. Resource Manager, kaynakları en etkili olabilecekleri yere atayarak çalışma zamanında değiştikçe iş yüklerine yanıt verir.
Resource Manager, bilgi işlem kaynakları üzerinde bir soyutlama görevi görür ve öncelikli olarak Görev Zamanlayıcı ile etkileşim kurar. Kitaplıklarınızın ve uygulamalarınızın performansında ince ayar yapmak için Resource Manager'ı kullanabilirsiniz, ancak genellikle Paralel Desenler Kitaplığı, Aracılar Kitaplığı ve Görev Zamanlayıcı tarafından sağlanan işlevselliği kullanırsınız. Bu kitaplıklar, iş yükleri değiştikçe kaynakları dinamik olarak yeniden dengelemek için Resource Manager'ı kullanır.
[Üst]
C++ Lambda İfadeleri
Eşzamanlılık Çalışma Zamanı tarafından tanımlanan türlerin ve algoritmaların çoğu C++ şablonları olarak uygulanır. Bu tür ve algoritmalardan bazıları, işi gerçekleştiren bir yordam olarak parametre olarak kabul eder. Bu parametre bir lambda işlevi, işlev nesnesi veya işlev işaretçisi olabilir. Bu varlıklar iş işlevleri veya iş yordamları olarak da adlandırılır.
Lambda ifadeleri, paralel işleme için iş işlevlerini tanımlamak için kısa bir yol sağladığından, önemli bir yeni Visual C++ dil özelliğidir. İşlev nesneleri ve işlev işaretçileri, Eşzamanlılık Çalışma Zamanı'nı mevcut kodunuzla kullanmanıza olanak tanır. Ancak, sağladıkları güvenlik ve üretkenlik avantajları nedeniyle yeni kod yazarken lambda ifadelerini kullanmanızı öneririz.
Aşağıdaki örnek, eş zamanlılık::p arallel_for_each algoritmasına yapılan birden çok çağrıda lambda işlevlerinin, işlev nesnelerinin ve işlev işaretçilerinin söz dizimini karşılaştırır. her parallel_for_each
çağrısı, std::array nesnesindeki her öğenin karesini hesaplamak için farklı bir teknik kullanır.
// 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ı
1
256
6561
65536
390625
C++ içindeki lambda işlevleri hakkında daha fazla bilgi için bkz . Lambda İfadeleri.
[Üst]
Gereksinimler
Aşağıdaki tabloda, Eşzamanlılık Çalışma Zamanı'nın her bileşeniyle ilişkili üst bilgi dosyaları gösterilmektedir:
Bileşen | Üstbilgi Dosyaları |
---|---|
Paralel Desen Kitaplığı (PPL) | ppl.h concurrent_queue.h concurrent_vector.h |
Zaman Uyumsuz Aracılar Kitaplığı | agents.h |
Görev Zamanlayıcı | concrt.h |
Resource Manager | concrtrm.h |
Eşzamanlılık Çalışma Zamanı Eşzamanlılık ad alanında bildirilir. (Bu ad alanının diğer adı olan eşzamanlılığı da kullanabilirsiniz.) Ad concurrency::details
alanı Eşzamanlılık Çalışma Zamanı çerçevesini destekler ve doğrudan kodunuzdan kullanılması amaçlanmamıştır.
Eşzamanlılık Çalışma Zamanı, C Çalışma Zamanı Kitaplığı'nın (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.
[Üst]