Изменения документа Tools.Collections

Редактировал(а) Alexandr Fokin 2023/01/11 15:18

<
От версии < 10.11 >
отредактировано Alexandr Fokin
на 2022/10/04 17:25
К версии < 13.3 >
отредактировано Alexandr Fokin
на 2022/12/31 15:41
>
Изменить комментарий: К данной версии нет комментариев

Комментарий

Подробности

Свойства страницы
Содержимое
... ... @@ -7,7 +7,7 @@
7 7  
8 8  ==== 1) LinkItemDictionary ====
9 9  
10 -Коллекция представляют из себя KeyValue хранилище, является потокобезопасным. (В основе лежит [[ConcurrentDictionary>>Разработка.NET.C#.Коллекции.Concurrent.ConcurrentDictionary.WebHome]], [[Удаление по условию>>Разработка.NET.C#.Коллекции.Concurrent.ConcurrentDictionary.Удаление по условию.WebHome]])
10 +Коллекция представляют из себя KeyValue хранилище, является потокобезопасным. (В основе лежит [[ConcurrentDictionary>>Разработка.NET.C#.Коллекции.System\. Collections\. Concurrent.ConcurrentDictionary.WebHome]], [[Удаление по условию>>Разработка.NET.C#.Коллекции.System\. Collections\. Concurrent.ConcurrentDictionary.Удаление по условию.WebHome]])
11 11  Для обеспечения оптимистичной блокировки в LinkStorage используется специальный item с полем Stamp, по которому проверяется не был ли изменен элемент во время операции.
12 12  
13 13  Интерфейс:
... ... @@ -19,16 +19,16 @@
19 19  |Func<ILinkItem<TKey, TData>, TData> updateFactory|фабрика для обновления существующего значения
20 20  )))|(% style="width:528px" %)Если по ключу нет записи, то
21 21   добавить запись
22 - счетчик записи = 1
22 + счетчик ссылок записи = 1
23 23   вызвать addFactory(если не null) и заполнить value.Data
24 24  Иначе если по ключу есть запись, то
25 - Увеличить счетчик на 1
25 + Увеличить счетчик ссылок на 1
26 26   вызвать updateFactory(если не null) и обновить value.Data
27 27  |RemoveLink|(% style="width:859px" %)(((
28 28  |TKey key|ключ
29 29  |Func<ILinkItem<TKey, TData>, TData> updateFactory|фабрика для обновления существующего значения
30 30  )))|(% style="width:528px" %)Вызвать updateFactory(если не null) и обновить value.Data
31 -Уменьшить счетчик на 1
31 +Уменьшить счетчик ссылок на 1
32 32  Если значение счетчика <= 0
33 33   То удалить запись
34 34  
... ... @@ -58,7 +58,7 @@
58 58  
59 59  Содержит коллекцию, выступающую в роли буфера с возможностями:
60 60  1) Параллельная запись в буфер. (Запись в буфер ведется по одному элементу)
61 -2) Параллельное чтение элементов из буфера, каждый потребитель получает уникальные значения из буфера. В случае, если буфер пуст, то потребитель может асинхронно ожидать поступление нового элемента в буфер.
61 +2) Параллельное асинхронное чтение элементов из буфера, каждый потребитель получает уникальные значения из буфера. В случае, если буфер пуст, то потребитель может асинхронно ожидать поступление нового элемента в буфер.
62 62  У буфера есть параметр RecommendedMaxSize, значение которого учитывается в методе TryAdd, но дополнительно не блокирует хранилище и счетчик Size, поэтому, при параллельной записи, фактический размер буфера может превысить значение RecommendedMaxSize на несколько элементов.
63 63  
64 64  Tools.Collections.Concurrent.AsyncBuffer.Store.IConcurrentStore<T> - внутреннее хранилище буфера (обертка над ConcurrentQueue и ConcurrentStack)
... ... @@ -66,6 +66,9 @@
66 66  
67 67  Классы из Tools.Collections.Concurrent.AsyncBuffer.PriorityWrapper добавляют обертку над IConcurrentStore<T> и IConcurrentBuffer<T>, которая позволяет управлять приоритетами потребления элементов из буфера. По факту для каждого значения приоритета храниться свой собственный IConcurrentStore<T> (задается через конструктор), и элемент считывается из первого непустого IConcurrentStore<T> в порядке приоритета.
68 68  
69 +[[Асинхронность. Async Await>>doc:Разработка.NET.C#.Многопоточность.Асинхронность\. Async Await.WebHome]]
70 +UDP: сейчас есть [[System. Threading. Channels>>doc:Разработка.NET.Библиотеки.События и потоки.System\. Threading\. Channels.WebHome]].
71 +
69 69  ----
70 70  
71 71