Изменения документа Многопоточность и асинхронность
Редактировал(а) Alexandr Fokin 2023/01/11 15:19
Изменить комментарий:
Updated parent field.
Комментарий
-
Свойства страницы (4 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Родительский документ
-
... ... @@ -1,1 +1,1 @@ 1 -xwiki: Разработка.NET.C#.WebHome1 +xwiki:NET.WebHome - Автор документа
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. cccc18081 +XWiki.Admin - Теги
-
... ... @@ -1,1 +1,0 @@ 1 -c#|thread|async - Содержимое
-
... ... @@ -6,30 +6,18 @@ 6 6 7 7 Понятие токена. (Поток проверяет токен, если токен свободен - забирает себе, иначе ожидает. В конце секции поток освобождает токен) 8 8 9 -Monitor.Enter, Monitor.Exit, lock 10 -Это самые часто используемые конструкции для синхронизации потоков. Реализуют идею критической секции: то есть код, написанный между вызовами Monitor.Enter, Monitor.Exit на одном ресурсе может быть выполнен в один момент времени лишь одним потоком. Оператор lock является синтаксическим сахаром вокруг вызовов Enter/Exit обернутых в try-finally. Приятной особенностью реализации критической секции в .NET является возможность повторного входа в нее для одного и того же потока. 11 - 12 -Mutex нужен для синронизации на уровне ОС. (Может использоваться несколькими приложениями) 13 -Семафоры позволяют ограничить доступ определенным количеством потоков. 14 - 15 -ReaderWriterLockSlim 16 -Либо много потоков читает, либо 1 поток пишет 17 - 18 18 При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения вылетит exception. 19 19 Шаблон: 20 - 21 -{{code language="c#"}} 22 22 try 23 23 { 24 24 LockSection(); 25 25 //... Action 26 26 } 27 -cat ch {}16 +cathc {} 28 28 finally 29 29 { 30 30 UnlockSection(); 31 31 } 32 -{{/code}} 33 33 34 34 Примеры 35 35 Запись в один и тот же файл с разных потоков. (В определенный момент времени в файл записывает только 1 поток) ... ... @@ -64,13 +64,10 @@ 64 64 В случае web приложений, данный подход позволяет обрабатывать больше активных подключений. (Поток обрабатывает запрос, сталкивается с асинхронной операцией, освобождается и может обработать другие входящие запросы. При окончании асинхронной операции тот-же или другой поток продолжит выполнение) Т.е. прирост не в скорости работы, а в пиковой нагрузке по кол-ву соединений, за счет освобождения потоков, ожидающих завершения асинхронных операций. При этом присутсвуют небольшие накладные расходы, связанные с работой Async/Await. 65 65 66 66 Материалы: 67 -* [[Habr Async/await в C#: концепция, внутреннее устройство, полезные приемы>>https://habr.com/ru/post/470830/]] 68 -* [[Metanit Aсинхронное программирование>>https://metanit.com/sharp/tutorial/13.3.php]] 69 -* [[Habr Асинхронный рассинхрон: антипаттерны в работе с async/await в .NET>>https://habr.com/ru/company/dodopizzadev/blog/435666/]] 70 -* [[Habr Async/await в C#: подводные камни>>https://habr.com/ru/post/257221/]] 71 -* [[Habr Async/await и механизм реализации в C# 5.0>>https://habr.com/ru/post/260217/]] 55 +* [[Async/await в C#: концепция, внутреннее устройство, полезные приемы>>https://habr.com/ru/post/470830/]] 72 72 73 73 58 + 74 74 **Taskcompletionsource** 75 75 76 76 Материалы: