Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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).
Kapcsolódó témakörök
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. |