Изменения документа Многопоточность и асинхронность
Редактировал(а) Alexandr Fokin 2023/01/11 15:19
<
>
отредактировано Alexandr Fokin
на 2022/07/29 02:03
на 2022/07/29 02:03
отредактировано Alexandr Fokin
на 2022/07/29 03:05
на 2022/07/29 03:05
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,59 +1,68 @@ 1 - **Инструментыработы с многопоточностью.**1 + 2 2 3 -Понятие критической секции. 4 -Некоторый блок кода, в котором работа несколько поток ограничевается или управляетя некоторым образом. Например в критической секции разрешена работа только одного потока, остальные потоки будут ожидать. 3 +| | 4 +|Понятие критической секции.|Некоторый блок кода, в котором работа несколько поток ограничивается или управляется некоторым образом. Например в критической секции разрешена работа только одного потока, остальные потоки будут ожидать. 5 +(Т.е. пессимистичная блокировка) 6 +|Понятие токена.|(Поток проверяет токен, если токен свободен - забирает себе, иначе ожидает освобождения. В конце секции поток освобождает токен) 5 5 6 - Понятие токена. (Поток проверяет токен, если токен свободен-забирает себе, иначе ожидает. В конце секции поток освобождает токен)8 +---- 7 7 8 -Monitor.Enter, Monitor.Exit, lock 9 -Это самые часто используемые конструкции для синхронизации потоков. Реализуют идею критической секции: то есть код, написанный между вызовами Monitor.Enter, Monitor.Exit на одном ресурсе может быть выполнен в один момент времени лишь одним потоком. Оператор lock является синтаксическим сахаром вокруг вызовов Enter/Exit обернутых в try-finally. Приятной особенностью реализации критической секции в .NET является возможность повторного входа в нее для одного и того же потока. 10 +=== Некоторые примитивы синхронизации === 10 10 11 -Mutex нужен для синронизации на уровне ОС. (Может использоваться несколькими приложениями) 12 -Семафоры позволяют ограничить доступ определенным количеством потоков. 12 +|(% style="width:251px" %) |(% style="width:1271px" %) 13 +|(% style="width:251px" %)Monitor и конструкция Lock|(% style="width:1271px" %)((( 14 +Реализуют идею критической секции: то есть код, написанный между вызовами Monitor.Enter, Monitor.Exit на одном ресурсе может быть выполнен в один момент времени лишь одним потоком. 13 13 14 -ReaderWriterLockSlim 15 -Либо много потоков читает, либо 1 поток пишет 16 +Оператор lock оберткой над Enter/Exit обернутых в try-finally. 17 +))) 18 +|(% style="width:251px" %)Semaphore|(% style="width:1271px" %)Семафоры позволяют ограничить доступ выполнения кода определенным количеством потоков. 19 +|(% style="width:251px" %)Mutex|(% style="width:1271px" %)Используется для синхронизации на уровне операционной системы. 20 +Может использоваться несколькими приложениями в рамках одной ОС. 21 +|(% style="width:251px" %)ReaderWriterLock 22 +ReaderWriterLockSlim|(% style="width:1271px" %)Либо много потоков читает, либо 1 поток пишет. 23 +|(% style="width:251px" %) |(% style="width:1271px" %) 16 16 17 -При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения вылетит exception. 18 -Шаблон: 25 +(% style="width:432px" %) 26 +|(% style="width:386px" %)Конструкции пользовательского режима|(% style="width:43px" %) 27 +|(% style="width:386px" %)Конструкции режима ядра|(% style="width:43px" %) 28 +|(% style="width:386px" %)Гибридные конструкции синхронизации потоков|(% style="width:43px" %) 19 19 30 +Материалы: 31 + 32 +* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1 33 +https://habr.com/ru/post/452094 34 +* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2 35 +https://habr.com/ru/post/459514 36 + 37 +---- 38 + 39 +=== Шаблон === 40 + 41 +При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения логики возникнет исключение. 42 +Во многих случаях имеет смысл реализовывать объект обертку, реализующую блокировку, и не допускающую неправильное использование. 43 +Общий шаблон использования: 44 + 20 20 {{code language="c#"}} 46 +EnterLock(); 21 21 try 22 -{ 23 - LockSection(); 48 +{ 24 24 //... Action 25 25 } 26 26 catch {} 27 27 finally 28 28 { 29 - UnlockSection();54 + ReleaseLock(); 30 30 } 31 31 {{/code}} 32 32 33 -Примеры 58 +---- 59 + 60 +Простой пример 34 34 Запись в один и тот же файл с разных потоков. (В определенный момент времени в файл записывает только 1 поток) 35 -Работа с кешем приложения. 36 36 37 - Материалы:63 +---- 38 38 39 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1 40 -https://habr.com/ru/post/452094 41 -* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2 42 -https://habr.com/ru/post/459514 43 43 44 -**Thread VS Task** 45 - 46 -Thread Pool (Пул потоков) 47 - 48 -Thread - физический поток в приложении 49 -Task - логическая задача, которая может выполниться в потоке из Thread Pool. 50 -Для Task, которые будет выполняться длительное время стоит использовать метку. 51 - 52 -Материалы: 53 - 54 -* Использование тасков в C# 55 -http://sonyks2007.blogspot.com/2013/11/c_11.html 56 - 57 57 **Taskcompletionsource** 58 58 59 59 Материалы: ... ... @@ -61,9 +61,10 @@ 61 61 * В чем смысл TaskCompletionSource<T> и когда его лучше использовать? 62 62 https://ru.stackoverflow.com/questions/780270/В-чем-смысл-taskcompletionsourcet-и-когда-его-лучше-использовать 63 63 64 -Книги :73 +==== Книги ==== 65 65 66 66 * [[Асинхронное программирование в C# 5.0 | O’Reilly>>doc:Книги.O’Reilly.Асинхронное программирование в C# 5\.0 | O’Reilly.WebHome]] 67 67 * [[Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование. | O’Reilly>>doc:Книги.O’Reilly.Конкурентность в C#\. Асинхронное, параллельное и многопоточное программирование\. | O’Reilly.WebHome]] 77 +* [[CLR via C# | Джеффри Рихтер>>Книги.CLR via C# | Джеффри Рихтер.WebHome]] 68 68 69 69