Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 69126|Відповідь: 4

[Джерело] Колекція безпеки потоку .NET/C# (збірка)

[Копіювати посилання]
Опубліковано 06.06.2017 17:13:53 | | |
Колекції, представлені в .NET Framework 1.0, можна знайти у просторі імен System.Collections. Ці колекції, включно з поширеними ArrayList і Hashtable, забезпечують певну безпеку потоку через властивість Synchronized, яка повертає потоково-безпечну обгортку, пов'язану з колекцією. Обгортка працює, блокуючи весь набір для кожної операції додавання або видалення. Тому кожен потік, що намагається отримати доступ до колекції, повинен чекати, поки настане його черга для отримання замка. Це не масштабується і призведе до значного погіршення продуктивності великих колекцій. Крім того, ця конструкція не повністю запобігає суперечкам. Для отримання додаткової інформації дивіться наступну сторінку на сайті MSDN: Синхронізація у загальних колекціях

Клас колекції, введений у .NET Framework 2.0, можна знайти у просторі імен System.Collections.Generic. Ці класи колекції включають List<T>, Dictionary< TKey, TValue> тощо. Ці класи забезпечують вищий тип безпеки та продуктивності порівняно з класами .NET Framework 1.0. Однак клас колекції .NET Framework 2.0 не забезпечує жодної синхронізації потоків; При додаванні або видаленні елементів у кількох потоках одночасно, користувацький код повинен забезпечувати всю синхронізацію.

Рекомендуємо використовувати паралельні класи збору в .NET Framework 4, оскільки вони забезпечують не лише типову безпеку класів колекції .NET Framework 2.0, а й більш ефективну та повну безпеку потоків, ніж захист потоків, яку забезпечує колекція .NET Framework 1.0.


Деякі типи одночасних колекцій використовують легкі механізми синхронізації, такі як SpinLock, SpinWait, SemaphoreSlim і CountdownEvent, які є новими для .NET Framework 4. Зазвичай наведені вище типи синхронізації використовують «зайняте обертання» на короткий час перед тим, як перевести потік у фактичний стан очікування. Якщо очікується, що час очікування буде дуже коротким, спін споживатиме значно менше обчислювальних ресурсів, ніж очікування, що передбачає конверсії ядра, які споживають багато ресурсів. Для класів колекції, що використовують ротацію, ця ефективність означає, що кілька потоків можуть дуже швидко додавати та видаляти елементи. Для отримання додаткової інформації про обмеження та блокування дивіться SpinLock і SpinWait. <T> Класи ConcurrentQueue і ConcurrentStack<T> взагалі не використовують блокування. Натомість вони покладаються на взаємоблоковані операції для безпеки потоків.

Ілюстрації

Оскільки паралельні класи колекції підтримують ICollection, вони надають реалізації властивостей IsSynchronized і SyncRoot, навіть якщо вони не пов'язані між собою. IsSynchronized завжди повертає false, тоді як SyncRoot завжди є null (нічого в Visual Basic).

У наступній таблиці наведені типи колекцій у просторі імен System.Collections.Concurrent.



тип
опис
BlockingCollection<T>
Забезпечує<T> будь-який тип тротлінгу та блокування для реалізації IProducerConsumerCollection. Для детальнішої інформації дивіться огляд BlockingCollection.
ConcurrentDictionary<TKey, TValue>
Ключ/значення — це поточнобезпечна реалізація словника.
ConcurrentQueue<T>
Реалізація FIFO черг для безпеки потоків (перший прийшов, перший вийшов).
ConcurrentStack<T>
Безпослідовна реалізація стеків LIFO (останній прийшов, перший вийшов).
ConcurrentBag<T>
Поточно-безпечна реалізація колекції елементів поза порядком.
IProducerConsumerCollection<T>
типи мають бути реалізовані уBlockingCollectionІнтерфейси, що використовуються в







Попередній:.net/c# itextsharp для генерації PDF-коду
Наступний:Install-Package: "MvvmLightLibs" вже має визначену залежність для "CommonServiceLocator"...
Опубліковано 08.11.2017 15:24:45 |
Так, я навчився
 Орендодавець| Опубліковано 08.02.2021 10:00:41 |
Список є<T> безпечним для потоку, якщо список взагалі не змінюється під час ітерації.
 Орендодавець| Опубліковано 23.03.2021 11:32:46 |
ConcurrentDictionary підтримує нові та оновлені оновлення
https://www.itsvse.com/thread-2955-1-1.html

 Орендодавець| Опубліковано 24.06.2023 14:20:57 |
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com