Zaman uyumsuz aracıları kitaplığı
Zaman uyumsuz aracıları kitaplığı (veya yalnızca Aracıları kitaplığı) eşzamanlılık etkin uygulama geliştirme sağlamlığını artırmak olanak veren bir programlama modeli sağlar. Bir oyuncu tabanlı programlama modeli ve coarse-grained dataflow için geçirerek ve görevleri ardışık işlem iletisi yükseltir c++ template library aracıları kitaplığıdır. Planlama ve kaynak yönetimi bileşenlerini eşzamanlılık zamanının üzerinde aracıları kitaplığı oluşturur.
Programlama modeli
Aracıları kitaplığı paylaşılan durum alternatifleri, akış denetimi yerine dataflow dayalı bir zaman uyumsuz iletişim modeli aracýlýðýyla Yalıtılmış bileşenlere bağlamanıza izin vererek sağlar. Dataflow başvuran bir programlama modeli burada yalıtımı yapılan tüm veriler gerektiğinde kullanılabilir; Akış denetimi burada hesaplamaları yapıldı önceden belirlenmiş bir sıraya göre bir programlama modeline başvurur.
Dataflow programlama modeli kavramı, ilgili ileti iletme, burada bir programın bağımsız bileşenler iletileri göndererek birbirleriyle.
Aracıları kitaplığı üç bileşenden oluşur: zaman uyumsuz aracıları, zaman uyumsuz ileti blokları, ve ileti iletme işlevlerini. Aracıları durumu korumak ve birbirleriyle ve dış bileşenleriyle iletişim kurmak için ileti blokları ve ileti iletme işlevlerini kullanın. Aracılar ve harici bileşenler gelen iletileri almak ve göndermek ileti geçirme işlevler sağlar. Zaman uyumsuz ileti blokları, iletileri saklamak ve eşzamanlı bir şekilde iletişim kurmak aracıları etkinleştirin.
Aşağıdaki resimde nasıl iki aracıları kullanın ileti blokları ve iletişim kurmak için ileti iletme işlevlerini gösterir. Bu resimde, agent1 bir ileti gönderir agent2 kullanarak concurrency::send işlevi ve bir concurrency::unbounded_buffer nesnesi. agent2kullandığı concurrency::receive işlevi, iletiyi okumak için. agent2bir ileti göndermek için aynı yöntemi kullanan agent1. Kesikli okları aracıları arasındaki veri akışını temsil eder. Düz okları aracıları, yazma veya okuma ileti blokları bağlanın.
Bu resimde uygulayan bir kod örneği, bu konudaki gösterilir.
Aracısı programlama modeli diğer eşzamanlılık ve eşitleme mekanizmaları, olaylar çok sayıda faydası vardır. Nesneler arasındaki durum değişiklikleri iletmek için ileti iletme kullanarak, paylaşılan kaynaklara erişimi yalıtmak ve böylece ölçeklenebilirliği artırmak olduğunu avantajlarından biri. İleti için bir dış eşitleme nesnesi bağlayarak yerine veri eşitleme şekilde bağlar avantajlıdır. Bu bileşenler arasında veri aktarımını basitleştirir ve uygulamalarınızın programlama hatalarını ortadan kaldırabilirsiniz.
Aracıları kitaplığı kullanma zamanı
Zaman uyumsuz olarak birbirleriyle gereken birden fazla işlem olduğunda aracıları kitaplığı kullanın. İleti blokları ve ileti iletme işlevlerini paralel uygulamalar kilitleri gibi eşitleme mekanizmaları gerek kalmadan yazmanıza olanak sağlar. Bu uygulama mantığı üzerinde odaklanmanıza olanak sağlar.
Aracısı programlama modelini oluşturmak için kullanılır veri pipelines veya ağlar. Veri kanalı her biri büyük bir amaç için katkıda bulunan belirli bir görevi gerçekleştiren bileşenler dizisidir. Başka bir bileşenden bir ileti aldığında her bileşeni dataflow potansiyel iş yapar. Bu çalışma sonucunda diğer potansiyel veya ağ bileşenlerinde geçirilir. Bileşenleri daha fazla belirtilecek eşzamanlılık işlevselliği diğer kitaplıklardan örneğin kullanabilirsiniz, Paralel Desenler kitaplığının (ppl).
Örnek
Aşağıdaki örnekte, bu konuda gösterilen resimde uygular.
// basic-agents.cpp
// compile with: /EHsc
#include <agents.h>
#include <string>
#include <iostream>
#include <sstream>
using namespace concurrency;
using namespace std;
// This agent writes a string to its target and reads an integer
// from its source.
class agent1 : public agent
{
public:
explicit agent1(ISource<int>& source, ITarget<wstring>& target)
: _source(source)
, _target(target)
{
}
protected:
void run()
{
// Send the request.
wstringstream ss;
ss << L"agent1: sending request..." << endl;
wcout << ss.str();
send(_target, wstring(L"request"));
// Read the response.
int response = receive(_source);
ss = wstringstream();
ss << L"agent1: received '" << response << L"'." << endl;
wcout << ss.str();
// Move the agent to the finished state.
done();
}
private:
ISource<int>& _source;
ITarget<wstring>& _target;
};
// This agent reads a string to its source and then writes an integer
// to its target.
class agent2 : public agent
{
public:
explicit agent2(ISource<wstring>& source, ITarget<int>& target)
: _source(source)
, _target(target)
{
}
protected:
void run()
{
// Read the request.
wstring request = receive(_source);
wstringstream ss;
ss << L"agent2: received '" << request << L"'." << endl;
wcout << ss.str();
// Send the response.
ss = wstringstream();
ss << L"agent2: sending response..." << endl;
wcout << ss.str();
send(_target, 42);
// Move the agent to the finished state.
done();
}
private:
ISource<wstring>& _source;
ITarget<int>& _target;
};
int wmain()
{
// Step 1: Create two message buffers to serve as communication channels
// between the agents.
// The first agent writes messages to this buffer; the second
// agents reads messages from this buffer.
unbounded_buffer<wstring> buffer1;
// The first agent reads messages from this buffer; the second
// agents writes messages to this buffer.
overwrite_buffer<int> buffer2;
// Step 2: Create the agents.
agent1 first_agent(buffer2, buffer1);
agent2 second_agent(buffer1, buffer2);
// Step 3: Start the agents. The runtime calls the run method on
// each agent.
first_agent.start();
second_agent.start();
// Step 4: Wait for both agents to finish.
agent::wait(&first_agent);
agent::wait(&second_agent);
}
Bu örnek aşağıdaki çıktıyı üretir:
agent1: sending request...
agent2: received 'request'.
agent2: sending response...
agent1: received '42'.
Aşağıdaki konularda, bu örnekte kullanılan işlevleri açıklanmaktadır.
İlgili Konular
Zaman uyumsuz aracıları
Büyük bilişim görevlerinin çözümünde zaman uyumsuz aracılarının rolünü açıklar.Zaman uyumsuz ileti blokları
Aracıları kitaplığı tarafından sağlanan çeşitli ileti bloğu türlerini açıklar.İleti gönderme fonksiyonları
Aracıları kitaplığı tarafından sağlanan çeşitli ileti geçişini yordamları açıklar.Nasıl yapılır: çeşitli Producer tüketici desenleri uygulamak
Uygulamanızda producer tüketici deseni uygulamak açıklar.Nasıl yapılır: çağrı ve transformer sınıflar çalışma işlevleri sağlayan
İş işlevlerini sağlamak için çeşitli yollar gösterilmiştir concurrency::call ve concurrency::transformer sınıfları.Nasıl yapılır: veri potansiyel kullanım transformer
Nasıl kullanılacağını gösteren concurrency::transformer veri potansiyel sınıfı.Nasıl yapılır: arasında tamamlanan görevleri Seç
Nasıl kullanılacağını gösteren concurrency::choice ve concurrency::join sınıfları ilk görevin arama algoritması seçin.Nasıl yapılır: düzenli aralıklarla ileti gönderme
Nasıl kullanılacağını gösteren concurrency::timer düzenli aralıklarla ileti göndermek için sınıf.Nasıl yapılır: bir iletiyi engelleme filtresi kullanma
Kabul etme veya reddetme iletiler için bir zaman uyumsuz ileti bloğu etkinleştirmek için bir filtre kullanımı gösterilmiştir.Paralel Desenler kitaplığının (ppl)
Uygulamalarınızda paralel algoritmalar gibi çeşitli paralel desenleri nasıl açıklar.Eşzamanlılık çalışma zamanı
Paralel programlama basitleştirir ve ilgili konuların bağlantılarını içeren eşzamanlılık çalışma açıklar.