Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 69126|Odpowiedź: 4

[Źródło] .NET/C# Zbiory Bezpieczeństwa Wątków (kolacja)

[Skopiuj link]
Opublikowano 06.06.2017 17:13:53 | | |
Kolekcje wprowadzone w .NET Framework 1.0 można znaleźć w przestrzeni nazw System.Collections. Te kolekcje, w tym powszechnie używane ArrayList i Hashtable, zapewniają pewien rodzaj bezpieczeństwa wątków dzięki właściwości Synchronized, która zwraca wątkowo bezpieczny wrapper związany z kolekcją. Owijacz działa poprzez blokowanie całego zbioru dla każdej operacji dodawania lub usuwania. Dlatego każdy wątek próbujący uzyskać dostęp do kolekcji musi poczekać na swoją kolej, aby zdobyć blokadę. Nie jest to skalowalne i spowoduje znaczne pogorszenie wydajności dużych kolekcji. Ponadto ten projekt nie całkowicie zapobiega rywalizacji. Więcej informacji można znaleźć na następującej stronie MSDN: Synchronizacja w zbiorach ogólnych

Klasa kolekcji wprowadzona w .NET Framework 2.0 znajduje się w przestrzeni nazw System.Collections.Generic. Do tych klas należą <T>Lista, Słownik< TKey, TValue> itd. Te klasy zapewniają wyższe bezpieczeństwo typów i wydajność w porównaniu do klas .NET Framework 1.0. Jednak klasa kolekcji .NET Framework 2.0 nie zapewnia synchronizacji wątków; Podczas dodawania lub usuwania elementów na wielu wątkach jednocześnie, kod użytkownika musi zapewnić pełną synchronizację.

Zalecamy używanie klas kolekcji współbieżnych w .NET Framework 4, ponieważ zapewniają one nie tylko bezpieczeństwo typów klas kolekcji .NET Framework 2.0, ale także bardziej efektywne i pełne bezpieczeństwo wątków niż bezpieczeństwo wątków oferowane przez kolekcję .NET Framework 1.0.


Niektóre typy kolekcji współbieżnych wykorzystują lekkie mechanizmy synchronizacji, takie jak SpinLock, SpinWait, SemaphoreSlim i CountdownEvent, które są nowością w .NET Framework 4. Zazwyczaj powyższe typy synchronizacji używają "zajętego wirowania" przez krótki czas przed przejściem wątku w faktyczny stan oczekiwania. Jeśli oczekiwanie będzie bardzo krótkie, spin zużywa znacznie mniej zasobów obliczeniowych niż oczekiwanie, które wiąże się z konwersjami jądra i dużym obciążeniem zasobów. Dla klas kolekcji wykorzystujących rotację ta efektywność oznacza, że wiele wątków może dodawać i usuwać elementy w bardzo szybkim tempie. Więcej informacji na temat ograniczania i blokowania można znaleźć w SpinLock i SpinWait. Klasy ConcurrentQueue<T> i ConcurrentStack w<T> ogóle nie używają blokad. Zamiast tego polegają na operacjach Interlockowanych dla bezpieczeństwa wątków.

Ilustrują

Ponieważ klasy kolekcji współbieżnej obsługują ICollection, zapewniają implementacje dla właściwości IsSynchronized i SyncRoot, nawet jeśli są one niepowiązane. IsSynchronized zawsze zwraca false, podczas gdy SyncRoot jest zawsze null (nic w Visual Basic).

Poniższa tabela przedstawia typy kolekcji w przestrzeni nazw System.Collections.Concurrent.



typ
opis
BlockingCollection<T>
Zapewnia<T> dowolne ograniczenia i blokowania do implementacji IProducerConsumerCollection. Więcej informacji można znaleźć w przeglądzie BlockingCollection.
ConcurrentDictionary<TKey, TValue>
Key/value to implementacja słownika bezpieczna dla wątków.
ConcurrentQueue<T>
Implementacja bezpieczeństwa wątków w kolejkach FIFO (first in, first out).
ConcurrentStack<T>
Bezwątkowa implementacja stosów LIFO (ostatni wejścia, pierwszego wyjścia).
ConcurrentBag<T>
Bezpieczna dla wątków implementacja zbioru elementów w nieuporządkowanej kolejności.
IProducerConsumerCollection<T>
Typy muszą być zaimplementowane wBlockingCollectioninterfejsy używane w







Poprzedni:.net/c# itextsharp do generowania kodu PDF
Następny:Pakiet instalacyjny: "MvvmLightLibs" ma już zdefiniowaną zależność dla "CommonServiceLocator"...
Opublikowano 08.11.2017 15:24:45 |
Tak, nauczyłem się
 Ziemianin| Opublikowano 08.02.2021 10:00:41 |
Lista jest<T> bezpieczna dla wątków, jeśli nie jest w ogóle modyfikowana podczas iteracji.
 Ziemianin| Opublikowano 23.03.2021 11:32:46 |
ConcurrentDictionary obsługuje nowe i zaktualizowane aktualizacje
https://www.itsvse.com/thread-2955-1-1.html

 Ziemianin| Opublikowano 24.06.2023 14:20:57 |
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com