Sdílet prostřednictvím


Struktury dat pro paralelní programování

Na.NET Framework verze 4 zavádí několik nových typů, které jsou užitečné pro paralelní programování včetně sady souběžných kolekce tříd, lehký synchronizace primitivní a typy lazy inicializace. Tyto typy lze použít libovolný kód víceprocesových aplikací včetně úloh Knihovna paralelní a PLINQ.

Souběžné kolekce tříd

Kolekce třídy v System.Collections.Concurrent podprocesu poskytují obor přidat a odebrat operací, které se pokud možno vyhnout zámky a uzamykání zamykání, kde jsou zámky nezbytné. Na rozdíl od kolekcí, které byly zavedeny v.NET Framework verze 1.0 a 2.0 souběžných kolekce třídy nevyžaduje kód uživatele při přístupu ke zboží přijmout všechny zámky. Souběžné kolekce tříd může výrazně zlepšit výkon nad typy jako System.Collections.ArrayList a System.Collections.Generic.List<T> (s implementovaným rozhraním uzamčení) v případech, kdy více podprocesů, přidat a odebrat položky z kolekce.

Následující tabulka uvádí nové třídy souběžných kolekce:

Typ

Popis

System.Collections.Concurrent.BlockingCollection<T>

Blokování a schopnosti podprocesu kolekcí, které implementují ohraničovací poskytuje System.Collections.Concurrent.IProducerConsumerCollection<T>. Podprocesy producentů blokovat, pokud nejsou k dispozici žádná patice nebo kolekce je plná. Podprocesy spotřebitele blokovat kolekce je prázdný. Tento typ podporuje také-blokování přístupu spotřebitelů a výrobců. BlockingCollection<T>slouží jako základní třída nebo zálohování úložiště blokování a ohraničovací libovolné třídy kolekce podporující IEnumerable<T>.

System.Collections.Concurrent.ConcurrentBag<T>

Implementace podprocesu vaku, která poskytuje škálovatelnou přidat a získejte operací.

System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>

Typ slovníku souběžných a škálovatelné.

System.Collections.Concurrent.ConcurrentQueue<T>

Souběžné a škálovatelné fronty FIFO.

System.Collections.Concurrent.ConcurrentStack<T>

Zásobník LIFO souběžných a škálovatelné.

Další informace naleznete v tématu Kolekce pro bezpečný přístup z více vláken.

Primitivní synchronizace

Nové primitivní synchronizace v System.Threading oboru názvů povolit uzamykání souběžnost a rychlejší výkon vyloučením nákladné blokovací mechanismy ve starších multithreading kód. Některé nové typy jako System.Threading.Barrier a System.Threading.CountdownEvent nemají žádné protějšky v dřívějších verzích.NET Framework.

Následující tabulka uvádí nové typy synchronizace:

Typ

Popis

System.Threading.Barrier

Umožňuje více podprocesů pracovat na algoritmu paralelně zajištěním bodu, kdy každý úkol signálu těšit a potom zablokovat dokud dorazilo některých nebo všech úkolů. Další informace naleznete v tématu Bariéra (rozhraní .NET Framework).

System.Threading.CountdownEvent

Poskytuje mechanismus snadno rendezvous zjednodušuje spojení a rozvětvení scénáře. Další informace naleznete v tématu CountdownEvent.

System.Threading.ManualResetEventSlim

Synchronizace základní podobný System.Threading.ManualResetEvent. ManualResetEventSlimje tenčí, ale lze použít pouze pro intra-process komunikaci. Další informace naleznete v tématu ManualResetEvent.

System.Threading.SemaphoreSlim

Základní synchronizace, která omezuje počet podprocesů, které lze současně přístup k prostředku nebo fondu zdrojů. Další informace naleznete v tématu Semaphores.

System.Threading.SpinLock

Vzájemné vyloučení lock základní, způsobující podprocesu se pokouší získat zámek čekat ve smyčce, nebo spin, pro dobu před jeho quantum získávání. V případech, kdy čekání na zámek se očekává krátké SpinLock nabízí vyšší výkon než jiné formy uzamčení. Další informace naleznete v tématu uzamčení.

System.Threading.SpinWait

Malé, lehké typ, který se otáčí po určitou dobu a nakonec uváděny do čekací stav podprocesu, pokud je překročen počet spin. Další informace naleznete v tématu SpinWait.

Více informací naleznete:

Opožděné Inicializace třídy

S lazy inicializace není přidělena paměť pro objekt dokud nebude potřeba. Inicializace lazy můžete zvýšit výkon objekt rozdělení Rovnoměrné rozprostření přes platnosti programu. Můžete povolit pro vlastní typ líný inicializace obtékání typu Lazy<T>.

Následující tabulka uvádí typy lazy inicializace:

Typ

Popis

System.Lazy<T>

Poskytuje lehký, podprocesu lazy inicializace.

System.Threading.ThreadLocal<T>

Každý podproces lazily vyvolání inicializační funkce poskytuje lazily inicializována hodnota na základě podprocesu.

System.Threading.LazyInitializer

Obsahuje statické metody, které je nutné přidělit vyhrazené, lazy inicializaci instance. Místo toho používají odkazy s cílem zajistit, aby cíle byly inicializovány jako k nim.

Další informace naleznete v tématu Opožděné inicializace.

Agregační výjimky

System.AggregateException Typu lze zachytit více výjimek, které jsou vyvolána souběžně na oddělené podprocesy a vrátí je spojování vlákno jako jedinou výjimku. System.Threading.Tasks.Task a System.Threading.Tasks.Parallel Použití typů a PLINQ AggregateException široce pro tento účel. Další informace naleznete v tématu Postupy: Zpracování výjimek vyvolaných úlohou a Postupy: Zpracování výjimek v PLINQ dotazu.

Viz také

Odkaz

System.Collections.Concurrent

System.Threading

Koncepty

Paralelní programování v rozhraní .NET Framework