Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 69126|Răspunde: 4

[Sursă] Colecția de siguranță a firului .NET/C# (colare)

[Copiază linkul]
Postat pe 06.06.2017 17:13:53 | | |
Colecțiile introduse în .NET Framework 1.0 pot fi găsite în spațiul de nume System.Collections. Aceste colecții, inclusiv ArrayList și Hashtable, folosite frecvent, oferă un anumit tip de siguranță a firelor prin proprietatea Synchronized, care returnează un wrapper thread-safe legat colecției. Wrapper-ul funcționează prin blocarea întregului set pentru fiecare operație de adăugare sau eliminare. Prin urmare, fiecare fir de discuție care încearcă să acceseze colecția trebuie să aștepte până când îi vine rândul pentru a obține blocarea. Aceasta nu este scalabilă și va duce la o degradare semnificativă a performanței pentru colecțiile mari. În plus, acest design nu împiedică complet disputa. Pentru mai multe informații, consultați pagina următoare de pe site-ul MSDN: Sincronizarea în colecțiile generice

Clasa de colecție introdusă în .NET Framework 2.0 poate fi găsită în spațiul de nume System.Collections.Generic. Aceste clase de colecție includ <T>Listă, Dicționar< TKey, TValue> etc. Aceste clase oferă o securitate și performanță mai ridicată a tipurilor comparativ cu clasele .NET Framework 1.0. Totuși, clasa de colecție .NET Framework 2.0 nu oferă nicio sincronizare a firelor de execuție; Când se adaugă sau se elimină elemente pe mai multe fire simultane, codul utilizatorului trebuie să asigure toată sincronizarea.

Recomandăm să folosiți clasele de colecție concurentă în .NET Framework 4, deoarece acestea oferă nu doar siguranța tipurilor claselor de colecție .NET Framework 2.0, ci și o securitate a firelor de execuție mai eficientă și completă decât cea oferită de colecția .NET Framework 1.0.


Unele tipuri de colecții concurente folosesc mecanisme ușoare de sincronizare precum SpinLock, SpinWait, SemaphoreSlim și CountdownEvent, care sunt noi în .NET Framework 4. De obicei, tipurile de sincronizare de mai sus folosesc "busy spinning" pentru o perioadă scurtă de timp înainte de a introduce firul în starea efectivă de așteptare. Dacă timpul de așteptare este așteptat să fie foarte scurt, spinul va consuma mult mai puține resurse de calcul decât așteptarea, ceea ce implică conversii ale kernelului care vor consuma multe resurse. Pentru clasele de colecție care folosesc rotație, această eficiență înseamnă că mai multe fire pot adăuga și elimina elemente într-un ritm foarte rapid. Pentru mai multe informații despre limitare și blocare, vezi SpinLock și SpinWait. <T> Clasele ConcurrentQueue și ConcurrentStack<T> nu folosesc deloc blocări. În schimb, se bazează pe operațiuni Interblocate pentru siguranța firului.

ilustra

Deoarece clasele de colectare concurente suportă ICollection, ele oferă implementări pentru proprietățile IsSynchronized și SyncRoot, chiar dacă nu sunt legate. IsSynchronized returnează întotdeauna false, în timp ce SyncRoot este mereu nul (nimic în Visual Basic).

Tabelul următor listează tipurile de colecții din spațiul de nume System.Collections.Concurrent.



tip
descriere
BlockingCollection<T>
Oferă<T> orice tip de limitare și blocare pentru implementarea IProducerConsumerCollection. Pentru mai multe informații, consultați prezentarea generală a BlockingCollection.
ConcurrentDictionary<TKey, TValue>
Cheia/valoarea este o implementare sigură pentru thread-uri a dicționarului.
ConcurrentQueue<T>
Implementarea siguranței firelor de discuție a cozilor FIFO (primul intrat, primul ieșit).
ConcurrentStack<T>
Implementare sigură la thread a stivelor LIFO (ultimul intrat, primul ieșit).
ConcurrentBag<T>
Implementare sigură la fire de execuție a unei colecții de elemente în afara ordinii.
IProducerConsumerCollection<T>
tipurile trebuie implementate înBlockingCollectionInterfețe folosite în







Precedent:.net/c# itextsharp pentru a genera cod PDF
Următor:Install-Package: "MvvmLightLibs" are deja o dependență definită pentru "CommonServiceLocator"...
Postat pe 08.11.2017 15:24:45 |
Da, am învățat
 Proprietarul| Postat pe 08.02.2021 10:00:41 |
Lista este<T> sigură pentru fire dacă nu este modificată deloc în timpul iterației.
 Proprietarul| Postat pe 23.03.2021 11:32:46 |
ConcurrentDictionary suportă actualizări noi și actualizate
https://www.itsvse.com/thread-2955-1-1.html

 Proprietarul| Postat pe 24.06.2023 14:20:57 |
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com