Изменения документа ConcurrentDictionary
Редактировал(а) Alexandr Fokin 2023/02/16 01:41
<
>
отредактировано Alexandr Fokin
на 2020/06/14 12:12
на 2020/06/14 12:12
отредактировано Alexandr Fokin
на 2023/02/16 01:39
на 2023/02/16 01:39
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (3 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Родительский документ
-
... ... @@ -1,1 +1,1 @@ 1 -Разработка.NET.C#.WebHome 1 +Разработка.NET.C#.Коллекции.System\. Collections\. Concurrent.WebHome - Теги
-
... ... @@ -1,0 +1,1 @@ 1 +keyValue|dictionary|threadSafe - Содержимое
-
... ... @@ -1,16 +1,45 @@ 1 +Best Practices for Using ConcurrentDictionary | Лучшие практики использования ConcurrentDictionary 2 +[[https:~~/~~/arbel.net/2013/02/03/best-practices-for-using-concurrentdictionary/>>url:https://arbel.net/2013/02/03/best-practices-for-using-concurrentdictionary/]] 1 1 2 - ПримерработыConcurrentDictionaryAddOrUpdate:3 - Вdictionaryесть одной значение по ключуkey1l1.4 +How to improve performance of ConcurrentDictionary.Count in C# 5 +[[https:~~/~~/stackoverflow.com/questions/41298156/how-to-improve-performance-of-concurrentdictionary-count-in-c-sharp>>url:https://stackoverflow.com/questions/41298156/how-to-improve-performance-of-concurrentdictionary-count-in-c-sharp]] 4 4 5 -1 Поток th1 запускает Update делегат по ключу key1. (Фиксирует текущее значение th1_v) 6 -2 Поток th2 запускает Update делегат по ключу key1. (Фиксирует текущее значение th2_v) 7 -3 Поток th2 заканчивает выполнение делегата Update. th1 сравнивает val1 = th2_v (Через equils). 8 - Значение равны и th2 сохраняет результат. 9 -4 Поток th1 заканчивает выполнение делегата Update. th2 сравнивает val1 = th1_v (Через equils). 10 - Значение НЕ равны и th2 повторно вызывает Update делегат. 11 - (Если элемент был удален, то запустить делегат Add) 12 - !Повторного вызова делегата не произойдет, в случает если результат работы th2 эквивалентен исходному начальному знаечнию val1. 7 +//Дополнение: В некоторых случаях может иметь смысл создание собственной обертки над коллекции и ведения в ней собственного счетчика размера. 8 +Контроль интерфейса обертки позволит четко отслеживать события Добавления/Удаления, для управления счетчиком можно использовать Interlocked операции.// 13 13 14 -Получается, что ни вызов AddOrUpdate, ни вызов конкретного делегата (Add/Update) сам по себе не блокирует значение в коллекции и не препятствует в изменении другим потокам. 10 +Concurrency структуры в .net. ConcurrentDictionary изнутри 11 +[[https:~~/~~/habr.com/ru/post/245727/>>https://habr.com/ru/post/245727/]] 15 15 16 -По сути мы получаем **оптимистичную блокировку**. В случае неудачи которой, повторно вызывается действие обработки. Критерием сравнения блокировки является Equils. В таком случае возможно имеет смысл перегрузка Equils и наличии в сущности некоторого ключевого поля. Нечто вроде Change Version TimeStamp. 13 +Под капотом у Dictionary и ConcurrentDictionary 14 +[[https:~~/~~/habr.com/ru/post/198104/>>https://habr.com/ru/post/198104/]] 15 + 16 +[[Dictionary>>Разработка.NET.C#.Коллекции.System\. Collections\. Generic.Dictionary.WebHome]] 17 + 18 +---- 19 + 20 +DotNext | Антон Нечуговских — Как мы написали свой lock-free dictionary 21 +[[https:~~/~~/www.youtube.com/watch?v=Vs7qp8FNURo>>https://www.youtube.com/watch?v=Vs7qp8FNURo]] 22 + 23 +---- 24 + 25 +==== Внутренние ссылки: ==== 26 + 27 +====== Дочерние страницы: ====== 28 + 29 +{{children/}} 30 + 31 +====== Обратные ссылки: ====== 32 + 33 +{{velocity}} 34 +#set ($links = $doc.getBacklinks()) 35 +#if ($links.size() > 0) 36 + #foreach ($docname in $links) 37 + #set ($rdoc = $xwiki.getDocument($docname).getTranslatedDocument()) 38 + * [[$escapetool.xml($rdoc.fullName)]] 39 + #end 40 +#else 41 + No back links for this page! 42 +#end 43 +{{/velocity}} 44 + 45 +----