Megosztás a következőn keresztül:


Adatpárhuzamosság (Feladat Párhuzamos Könyvtár)

Az adat-párhuzamosság olyan forgatókönyvekre utal, amelyekben ugyanazt a műveletet egyidejűleg (azaz párhuzamosan) hajtják végre egy forrásgyűjtemény vagy tömb elemein. Az adat-párhuzamos műveletekben a forrásgyűjtemény particionálása úgy történik, hogy több szál egyszerre több szegmensen is működjön.

A feladat párhuzamos kódtára (TPL) támogatja az adatok párhuzamosságát az System.Threading.Tasks.Parallel osztályon keresztül. Ez az osztály metódusalapú párhuzamos implementációkat biztosít a for és foreach hurkokhoz (For és For Each a Visual Basicben). A cikluslogikát ugyanúgy kell írnia egy Parallel.For vagy Parallel.ForEach ciklushoz, mint egy szekvenciális ciklust. Nem kell szálakat vagy üzenetsor-munkaelemeket létrehoznia. Az alapszintű hurkokban nem kell zárolást végeznie. A TPL kezeli az összes alacsony szintű feladatot. A Parallel.For és Parallel.ForEach használatával kapcsolatos részletes információkért töltse le a Párhuzamos programozás mintái: A párhuzamos minták megértése és alkalmazása a .NET keretrendszer 4-gyel című dokumentumot. Az alábbi példakód egy egyszerű foreach hurkot és annak párhuzamos megfelelőjét mutatja be.

Megjegyzés:

Ez a dokumentáció lambdakifejezéseket használ a meghatalmazottak definiálásához a TPL-ben. Ha nem ismeri a lambdakifejezéseket a C# vagy a Visual Basic alkalmazásban, tekintse meg Lambda-kifejezéseket a PLINQ-ban és a TPL-.

// Sequential version
foreach (var item in sourceCollection)
{
    Process(item);
}

// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));
' Sequential version        
For Each item In sourceCollection
    Process(item)
Next

' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))

Párhuzamos ciklus futtatásakor a TPL particionálja az adatforrást, hogy a hurok egyszerre több részen is működjön. A háttérben a Feladatütemező rendszererőforrások és számítási feladatok alapján particionálja a feladatot. Ha lehetséges, az ütemező újraosztja a munkát több szál és processzor között, ha a számítási feladat kiegyensúlyozatlanná válik.

Megjegyzés:

Saját egyéni particionálót vagy ütemezőt is megadhat. További információ: Egyéni particionálók PLINQ-hoz, TPL-hez és feladatütemezőkhöz.

Mind a Parallel.For és Parallel.ForEach metódusok rendelkeznek számos túlterheléssel, amelyek lehetővé teszik a hurok végrehajtásának leállítását vagy megszakítását, a hurok állapotának megfigyelését más szálakon, a szálhoz lokálisan tartozó állapot fenntartását, lokális objektumok véglegesítését, az egyidejűség mértékének szabályozását, stb. A funkciót engedélyező segédtípusok a következők: ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationTokenés CancellationTokenSource.

További információ: Minták párhuzamos programozáshoz: Párhuzamos minták értelmezése és alkalmazása a .NET-keretrendszer 4-zel.

A PLINQ támogatja az adat-párhuzamosságot deklaratív vagy lekérdezésszerű szintaxissal. További információ: Parallel LINQ (PLINQ).

Cím Leírás
Útmutató: Egyszerű Parallel.For ciklus írása Leírja, hogyan írhat For ciklust bármely tömb vagy indexelhető IEnumerable<T> forrásgyűjtemény fölé.
Hogyan írjunk egyszerű Parallel.ForEach ciklust Azt ismerteti, hogyan írhat ciklust ForEach bármely IEnumerable<T> forrásgyűjtemény felett.
Hogyan: Párhuzamos for-ciklus leállítása vagy megszakítása Leírja, hogyan állíthat le vagy szakíthat meg egy párhuzamos hurkot, hogy az összes szál értesüljön a műveletről.
Útmutató: Parallel.For Loop írása Thread-Local változókkal Azt ismerteti, hogyan írhat olyan hurkot For , amelyben minden szál olyan privát változót tart fenn, amely nem látható más szálak számára, és hogyan szinkronizálhatja az eredményeket az összes szálból a ciklus befejezésekor.
Útmutató: A Parallel.ForEach ciklus írása Partition-Local változókkal Azt ismerteti, hogyan írhat olyan hurkot ForEach , amelyben minden szál olyan privát változót tart fenn, amely nem látható más szálak számára, és hogyan szinkronizálhatja az eredményeket az összes szálból a ciklus befejezésekor.
Útmutató: Párhuzamos.For vagy ForEach ciklus megszakítása Leírja, hogyan lehet megszakítani a párhuzamos ciklusokat System.Threading.CancellationToken használatával.
Útmutató: A kis huroktestek felgyorsításához A végrehajtás gyorsításának egyik módja, ha a ciklustörzs nagyon kicsi.
Feladat párhuzamos könyvtár (TPL) Áttekintést nyújt a párhuzamos feladattárról.
Párhuzamos programozás Párhuzamos programozást vezet be a .NET-keretrendszerben.

Lásd még