Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 69126|Odpoveď: 4

[Zdroj] .NET/C# Zber bezpečnosti vlákien (kolácia)

[Kopírovať odkaz]
Zverejnené 6. 6. 2017 17:13:53 | | |
Kolekcie zavedené v .NET Framework 1.0 možno nájsť v mennom priestore System.Collections. Tieto kolekcie, vrátane bežne používaných ArrayList a Hashtable, poskytujú určitú formu ochrany vlákien prostredníctvom vlastnosti Synchronized, ktorá vracia vláknovo bezpečný obal súvisiaci s kolekciou. Obalovač funguje tak, že zablokuje celú sadu pre každú operáciu pridávania alebo odstraňovania. Preto každé vlákno, ktoré sa snaží získať prístup ku zbierke, musí počkať, kým príde na rad na získanie zámku. To nie je škálovateľné a povedie k výraznému zhoršeniu výkonu pri veľkých kolekciách. Okrem toho tento dizajn úplne nebráni sporu. Pre viac informácií si pozrite nasledujúcu stránku na webovej stránke MSDN: Synchronizácia v generických kolekciách

Trieda kolekcií zavedená v .NET Framework 2.0 sa nachádza v mennom priestore System.Collections.Generic. Tieto triedy zahŕňajú Zoznam<T>, Slovník< TKey, TValue> atď. Tieto triedy poskytujú vyššiu bezpečnosť typov a výkon v porovnaní s triedami .NET Framework 1.0. Trieda kolekcie .NET Framework 2.0 však neposkytuje žiadnu synchronizáciu vlákien; Pri pridávaní alebo odstraňovaní položiek na viacerých vláknach súčasne musí používateľský kód zabezpečiť všetku synchronizáciu.

Odporúčame používať triedy súbežnej kolekcie v .NET Framework 4, pretože poskytujú nielen typovú bezpečnosť tried kolekcie .NET Framework 2.0, ale aj efektívnejšiu a kompletnejšiu bezpečnosť vlákien než bezpečnosť vlákien poskytovanú kolekciou .NET Framework 1.0.


Niektoré typy súbežných kolekcií používajú ľahké synchronizačné mechanizmy ako SpinLock, SpinWait, SemaphoreSlim a CountdownEvent, ktoré sú novinkou v .NET Framework 4. Typicky vyššie uvedené typy synchronizácie používajú "zaneprázdnené otáčanie" krátky čas predtým, než sa vlákno dostane do skutočného čakacieho stavu. Ak sa očakáva, že čas čakania bude veľmi krátky, spin spotrebuje oveľa menej výpočtových zdrojov než čakanie, ktoré zahŕňa konverzie jadra, ktoré spotrebujú veľa zdrojov. Pre triedy kolekcií, ktoré používajú rotáciu, táto efektivita znamená, že viaceré vlákna dokážu pridávať a odstraňovať položky veľmi rýchlo. Pre viac informácií o obmedzovaní a blokovaní pozri SpinLock a SpinWait. Triedy ConcurrentQueue<T> a ConcurrentStack vôbec<T> nepoužívajú zámky. Namiesto toho sa spoliehajú na vzájomne blokované operácie pre bezpečnosť vlákien.

ilustrovať

Keďže triedy súbežnej kolekcie podporujú ICollection, poskytujú implementácie pre vlastnosti IsSynchronized a SyncRoot, aj keď spolu nesúvisia. IsSynchronized vždy vracia false, zatiaľ čo SyncRoot je vždy null (Nothing vo Visual Basic).

Nasledujúca tabuľka uvádza typy kolekcií v mennom priestore System.Collections.Concurrent.



typ
popis
BlockingCollection<T>
Poskytuje<T> akýkoľvek typ obmedzovania a blokovania pre implementáciu IProducerConsumerCollection. Pre viac informácií pozri prehľad BlockingCollection.
ConcurrentDictionary<TKey, TValue>
Key/value je implementácia slovníka bezpečná pre vlákna.
ConcurrentQueue<T>
Implementácia bezpečnosti vlákien vo frontách FIFO (first in, first out).
ConcurrentStack<T>
Implementácia LIFO (last in, first-out) stackov bezpečná pre vlákna.
ConcurrentBag<T>
Implementácia bezpečnej implementácie kolekcie prvkov v nesprávnom poradí.
IProducerConsumerCollection<T>
Typy musia byť implementované vBlockingCollectionRozhrania používané v







Predchádzajúci:.net/c# itextsharp na generovanie PDF kódu
Budúci:Inštalačný balík: "MvvmLightLibs" už má definovanú závislosť pre "CommonServiceLocator"...
Zverejnené 8. 11. 2017 15:24:45 |
Áno, naučil som sa
 Prenajímateľ| Zverejnené 8. 2. 2021 10:00:41 |
Zoznam je<T> bezpečný pre vlákna, ak sa počas iterácie vôbec neupraví.
 Prenajímateľ| Zverejnené 23. 3. 2021 11:32:46 |
ConcurrentDictionary podporuje nové a aktualizované aktualizácie
https://www.itsvse.com/thread-2955-1-1.html

 Prenajímateľ| Zverejnené 24. 6. 2023 14:20:57 |
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com