Omówienie Runtime współbieżności
Ten dokument zawiera omówienie środowiska wykonawczego współbieżności.Opisuje ona korzyści w czasie wykonywania współbieżności kiedy go używać, a jego składniki współdziałania ze sobą oraz z systemu operacyjnego i aplikacji.
Sekcje
Ten dokument zawiera następujące sekcje:
Dlaczego jest ważne przez moduł wykonawczy dla współbieżności
Architektura
Wyrażenia C++ Lambda
Wymagania
Dlaczego jest ważne przez moduł wykonawczy dla współbieżności
Czas pracy dla współbieżność miejsce jednolitości i przewidywalności dla aplikacji i składników aplikacji, które są uruchamiane jednocześnie.Dwa przykłady świadczeń aparatu plików wykonywalnych współbieżności Tworzenie harmonogramów zadań w zakresie współpracy i Blokowanie współpracy.
Środowisko wykonawcze współbieżność używa harmonogramu zadań w zakresie współpracy, która implementuje algorytmem kradzież pracy do efektywnej dystrybucji prac przez poszczególne zasoby komputerowe.Rozważmy na przykład aplikacja, która ma dwa wątki, które są zarówno zarządzane przez tego samego środowiska wykonawczego.Jeśli jeden wątek zakończy swoje zaplanowane zadanie, to odciążania pracy z innego wątku.Ten mechanizm równoważy obciążenia ogólną aplikacji.
W czasie wykonywania współbieżności jest także synchronizacyjne, wykorzystujące blokowanie spółdzielni do synchronizowania dostępu do zasobów.Rozważmy na przykład zadanie, które musi mieć wyłączny dostęp do zasobu udostępnionego.Blokując wspólnie, środowisko czasu wykonania można użyć pozostałych quantum wykonać inne zadanie, zgodnie z pierwszym zadaniem oczekuje na zasób.Ten mechanizm promuje maksymalne użycie zasobów obliczeniowych.
Top
Architektura
W czasie wykonywania współbieżności jest podzielony na cztery składniki: równoległego wzorów biblioteki (PPL), asynchroniczne biblioteki agentów, harmonogram zadań i Menedżera zasobów.Składniki te znajdują się między systemu operacyjnego i aplikacji.Na następującej ilustracji pokazano składniki wykonawcze współbieżności współdziałania między systemu operacyjnego i aplikacji:
Architektura wykonywania równoczesnego
Ważne |
---|
Składniki harmonogram zadań i Menedżer zasobów nie są dostępne z Windows Store aplikacji. |
W czasie wykonywania współbieżności jest wysoce on, oznacza to, można połączyć istniejące funkcje zrobić więcej.W czasie wykonywania współbieżności redaguje wiele funkcji, takich jak algorytmy równoległe, z elementów niższego poziomu.
W czasie wykonywania współbieżności jest także synchronizacyjne, wykorzystujące blokowanie spółdzielni do synchronizowania dostępu do zasobów.Aby uzyskać więcej informacji na temat tych pierwotnych synchronizacji, zobacz Synchronizacja struktury danych.
W poniższych sekcjach przedstawiono krótkie omówienie zapewnia każdego składnika i kiedy go używać.
Równoległe Biblioteka wzorców
Biblioteka wzorców równoległego (PPL) zapewnia pojemniki ogólnego przeznaczenia i algorytmów do wykonywania drobnoziarnistych równoległości.Włącza ten PPL równoległości konieczne dane przez zapewnienie równolegle algorytmów, które rozłożenie obliczeń na zbiory lub zestawy danych w zasobach komputerowych.Umożliwia także proste zadania przez zapewnienie obiektów zadań, które rozłożenie wielu operacji niezależne w zasobach komputerowych.
Gdy masz lokalnego obliczeń, która może korzystać z równoległe wykonywanie za pomocą równoległych biblioteki desenie.Na przykład, można użyć concurrency::parallel_for algorytm do przekształcania istniejącego for pętlę, aby działać równolegle.
Aby uzyskać więcej informacji na temat równoległych biblioteki desenie zobacz Biblioteka desenie równoległe (PPL).
Asynchroniczne biblioteki agentów
Asynchroniczne biblioteki agentów (lub po prostu Biblioteki agentów) zawiera zarówno oparte na Aktor model programowania, jak i wiadomość, przekazując interfejsów dla gruboziarnistych przepływ danych i przetwarzanie potokowe zadań.Asynchroniczne agentów pozwalają na dokonywanie wydajne wykorzystanie czas oczekiwania, wykonując pracę, jak inne składniki poczekaj, aż dane.
Korzystanie z biblioteki agentów, gdy istnieje wiele jednostek, które komunikują się ze sobą asynchronicznie.Na przykład można utworzyć agenta, który odczytuje dane z pliku lub połączenia sieciowego, a następnie używa przekazywania interfejsów wiadomości do wysłania danych do innego przedstawiciela.
Aby uzyskać więcej informacji na temat biblioteki agentów, zobacz Biblioteka agentów asynchroniczne.
Harmonogram zadań
Harmonogram zadań, planuje i koordynuje zadania w czasie wykonywania.Harmonogram zadań jest wspólne i osiągnąć maksymalne użycie zasobów komputerowych za pomocą algorytmu kradzież pracy.
W czasie wykonywania współbieżności dostarcza harmonogram domyślny, więc nie trzeba zarządzać szczegółów infrastrukturę.Jednakże aby spełnić wymagania jakości aplikacji, można również dołączyć własne planowania zasad lub jednostki stowarzyszonej szczególnych pracownikom dotyczącą określonych zadań.
Aby uzyskać więcej informacji o harmonogramie zadań, zobacz Harmonogram zadań (współbieżności Runtime).
Menedżer zasobów
Rola Menedżera zasobów polega na zarządzaniu zasobów komputerowych, takich jak procesory i pamięci.Menedżer zasobów odpowiada obciążeń, ponieważ zmieniają się w czasie wykonywania przez przydzielanie zasobów do tak, aby były najbardziej skuteczne.
Menedżer zasobów służy jako Abstrakcja nad zasobów komputerowych i przede wszystkim współdziała z harmonogramu zadań.Chociaż można używać Menedżera zasobów, dostosować ustawienia do bibliotek i aplikacji, zwykle służy funkcja, dostarczonego przez równoległe Biblioteka wzorców, biblioteki agentów i harmonogramu zadań.Za pomocą Menedżera zasobów tych bibliotek dynamicznie zrównoważenia zasobów, jak zmiany obciążenia pracą.
Top
Wyrażenia C++ Lambda
Wiele typów i algorytmów, które są zdefiniowane w czasie wykonywania współbieżności są implementowane jako szablonów języka C++.Podjęcia niektórych typów i algorytmy jako parametr procedurę, która wykonuje pracę.Ten parametr może być funkcją lambda, obiekt funkcji lub wskaźnika funkcji.Podmioty te są również określane jako funkcje pracy lub procedur pracy.
Wyrażenia lambda są ważną nową funkcją języka Visual C++, ponieważ zapewniają zwięzły sposób, aby zdefiniować działają funkcje przetwarzania równoległego.Funkcje jako obiekty i wskaźników funkcji umożliwiają istniejącego kodu za pomocą środowiska wykonawczego współbieżności.Jednak zaleca się, aby użyć wyrażenia lambda, pisząc nowy kod ze względu na bezpieczeństwo i wydajność korzyści, które świadczą.
W poniższym przykładzie porównanie składni funkcji lambda, funkcje jako obiekty i wskaźników funkcji w wielu wywołań concurrency::parallel_for_each algorytm.Każde wywołanie parallel_for_each używana jest inna technika, aby policzyć kwadrat każdego elementu w std::array obiektu.
// 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;
});
}
Dane wyjściowe
Aby uzyskać więcej informacji na temat funkcji lambda w języku C++, zobacz Lambda wyrażenia w języku C++.
Top
Wymagania
W poniższej tabeli przedstawiono pliki nagłówków, które są skojarzone z każdą składową Runtime współbieżności:
Składnik |
Pliki nagłówków |
---|---|
Równoległe wzorów biblioteki (PPL) |
ppl.h concurrent_queue.h concurrent_vector.h |
Asynchroniczne biblioteki agentów |
Agents.h |
Harmonogram zadań |
concrt.h |
Menedżer zasobów |
concrtrm.h |
W czasie wykonywania współbieżności jest zadeklarowana w współbieżności obszaru nazw.(Można również użyć współbieżności, który jest aliasem dla tego obszaru nazw.) concurrency::details Obszaru nazw obsługuje framework Runtime współbieżności i nie jest przeznaczony do użycia bezpośrednio w kodzie.
W czasie wykonywania współbieżności jest dostarczane w ramach narzędzia C Runtime Library (CRT).Aby uzyskać więcej informacji dotyczących sposobu tworzenia aplikacji korzystającej z CRT, zobacz Funkcje biblioteki CRT.
Top