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

<
От версии < 10.1 >
отредактировано Alexandr Fokin
на 2020/06/06 10:20
К версии < 5.3 >
отредактировано Alexandr Fokin
на 2020/01/05 22:47
>
Изменить комментарий: Update document after refactoring.

Комментарий

Подробности

Свойства страницы
Родительский документ
... ... @@ -1,1 +1,1 @@
1 -Разработка.NET.C#.WebHome
1 +Разработка.NET.WebHome
Содержимое
... ... @@ -1,9 +1,6 @@
1 1  
2 2  **Инструменты работы с многопоточностью.**
3 3  
4 -Рекомендуется к прочтению:
5 -**[[Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование.>>https://wiki.denhome.ru/bin/view/Книги/Конкурентность%20в%20C%23.%20Асинхронное%2C%20параллельное%20и%20многопоточное%20программирование.%20%7C%20O’Reilly]]**
6 -
7 7  Понятие критической секции.
8 8  Некоторый блок кода, в котором работа несколько поток ограничевается или управляетя некоторым образом. Например в критической секции разрешена работа только одного потока, остальные потоки будут ожидать.
9 9  
... ... @@ -13,7 +13,7 @@
13 13  Это самые часто используемые конструкции для синхронизации потоков. Реализуют идею критической секции: то есть код, написанный между вызовами Monitor.Enter, Monitor.Exit на одном ресурсе может быть выполнен в один момент времени лишь одним потоком. Оператор lock является синтаксическим сахаром вокруг вызовов Enter/Exit обернутых в try-finally. Приятной особенностью реализации критической секции в .NET является возможность повторного входа в нее для одного и того же потока.
14 14  
15 15  Mutex нужен для синронизации на уровне ОС. (Может использоваться несколькими приложениями)
16 -Семафоры позволяют ограничить доступ определенным количеством потоков.
13 +Семафоры позволяют ограничить доступ определенным количеством объектов.
17 17  
18 18  ReaderWriterLockSlim
19 19  Либо много потоков читает, либо 1 поток пишет
... ... @@ -20,19 +20,16 @@
20 20  
21 21  При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения вылетит exception.
22 22  Шаблон:
23 -
24 -{{code language="c#"}}
25 25  try
26 26  {
27 27   LockSection();
28 28   //... Action
29 29  }
30 -catch {}
25 +cathc {}
31 31  finally
32 32  {
33 33   UnlockSection();
34 34  }
35 -{{/code}}
36 36  
37 37  Примеры
38 38  Запись в один и тот же файл с разных потоков. (В определенный момент времени в файл записывает только 1 поток)
... ... @@ -65,18 +65,12 @@
65 65  Асинхронный код записывается в синхронном виде (Выглядит последовательно), но при этом в момент выполнения задач, выполняющий поток не простаивает, а освобождается и может выполнять другие задачи.
66 66  В случае desctop приложения это позволяет не блокировать UI (зависание основного потока во время выполнения операций).
67 67  В случае web приложений, данный подход позволяет обрабатывать больше активных подключений. (Поток обрабатывает запрос, сталкивается с асинхронной операцией, освобождается и может обработать другие входящие запросы. При окончании асинхронной операции тот-же или другой поток продолжит выполнение) Т.е. прирост не в скорости работы, а в пиковой нагрузке по кол-ву соединений, за счет освобождения потоков, ожидающих завершения асинхронных операций. При этом присутсвуют небольшие накладные расходы, связанные с работой Async/Await.
68 -[[devblogs.microsoft| ConfigureAwait FAQ>>https://devblogs.microsoft.com/dotnet/configureawait-faq/?utm_source=csharp&utm_medium=email&utm_campaign=digest]]
69 69  
70 70  Материалы:
71 -* [[Habr Async/await в C#: концепция, внутреннее устройство, полезные приемы>>https://habr.com/ru/post/470830/]]
72 -* [[Metanit Aсинхронное программирование>>https://metanit.com/sharp/tutorial/13.3.php]]
73 -* [[Habr Асинхронный рассинхрон: антипаттерны в работе с async/await в .NET>>https://habr.com/ru/company/dodopizzadev/blog/435666/]]
74 -* [[Habr Async/await в C#: подводные камни>>https://habr.com/ru/post/257221/]]
75 -* [[Habr Async/await и механизм реализации в C# 5.0>>https://habr.com/ru/post/260217/]]
64 +* [[Async/await в C#: концепция, внутреннее устройство, полезные приемы>>https://habr.com/ru/post/470830/]]
76 76  
77 77  
78 78  
79 -
80 80  **Taskcompletionsource**
81 81  
82 82  Материалы: