Изменения документа Многопоточность и асинхронность
Редактировал(а) Alexandr Fokin 2023/01/11 15:19
<
>
отредактировано Alexandr Fokin
на 2023/01/11 15:17
на 2023/01/11 15:17
отредактировано Alexandr Fokin
на 2021/12/26 16:40
на 2021/12/26 16:40
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (2 изменено, 0 добавлено, 0 удалено)
-
Объекты (1 изменено, 0 добавлено, 1 удалено)
Подробности
- Свойства страницы
-
- Название
-
... ... @@ -1,1 +1,1 @@ 1 -Многопоточность и асинхронность 21 +Многопоточность и асинхронность - Содержимое
-
... ... @@ -1,40 +1,69 @@ 1 -| | 2 -|Понятие критической секции.|Некоторый блок кода, в котором работа несколько поток ограничивается или управляется некоторым образом. Например в критической секции разрешена работа только одного потока, остальные потоки будут ожидать. 3 -(Т.е. [[Пессимистичная блокировка>>doc:Архитектура и модели.Блокировки.Пессимистичная блокировка.WebHome]]) 4 -|Понятие токена.|Поток проверяет токен, если токен свободен - забирает себе, иначе ожидает освобождения. В конце секции поток освобождает токен. 1 +**Инструменты работы с многопоточностью.** 5 5 6 ----- 3 +Понятие критической секции. 4 +Некоторый блок кода, в котором работа несколько поток ограничевается или управляетя некоторым образом. Например в критической секции разрешена работа только одного потока, остальные потоки будут ожидать. 7 7 8 -Простой пример: 6 +Понятие токена. (Поток проверяет токен, если токен свободен - забирает себе, иначе ожидает. В конце секции поток освобождает токен) 7 + 8 +Monitor.Enter, Monitor.Exit, lock 9 +Это самые часто используемые конструкции для синхронизации потоков. Реализуют идею критической секции: то есть код, написанный между вызовами Monitor.Enter, Monitor.Exit на одном ресурсе может быть выполнен в один момент времени лишь одним потоком. Оператор lock является синтаксическим сахаром вокруг вызовов Enter/Exit обернутых в try-finally. Приятной особенностью реализации критической секции в .NET является возможность повторного входа в нее для одного и того же потока. 10 + 11 +Mutex нужен для синронизации на уровне ОС. (Может использоваться несколькими приложениями) 12 +Семафоры позволяют ограничить доступ определенным количеством потоков. 13 + 14 +ReaderWriterLockSlim 15 +Либо много потоков читает, либо 1 поток пишет 16 + 17 +При использовании инструментов важно освобождать освобождать блокировку, даже если в процессе выполнения вылетит exception. 18 +Шаблон: 19 + 20 +{{code language="c#"}} 21 +try 22 +{ 23 + LockSection(); 24 + //... Action 25 +} 26 +catch {} 27 +finally 28 +{ 29 + UnlockSection(); 30 +} 31 +{{/code}} 32 + 33 +Примеры 9 9 Запись в один и тот же файл с разных потоков. (В определенный момент времени в файл записывает только 1 поток) 35 +Работа с кешем приложения. 10 10 11 - ----37 +Материалы: 12 12 13 -==== Книги ==== 39 +* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1 40 +https://habr.com/ru/post/452094 41 +* .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2 42 +https://habr.com/ru/post/459514 14 14 15 -* [[Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование. | O’Reilly>>doc:Книги.O’Reilly.Конкурентность в C#\. Асинхронное, параллельное и многопоточное программирование\. | O’Reilly.WebHome]] 16 -* [[CLR via C# | Джеффри Рихтер>>Книги.CLR via C# | Джеффри Рихтер.WebHome]] 44 +**Thread VS Task** 17 17 18 - ----46 +Thread Pool (Пул потоков) 19 19 20 -==== Внутренние ссылки: ==== 48 +Thread - физический поток в приложении 49 +Task - логическая задача, которая может выполниться в потоке из Thread Pool. 50 +Для Task, которые будет выполняться длительное время стоит использовать метку. 21 21 22 - ====== Дочерние страницы:======52 +Материалы: 23 23 24 -{{children/}} 54 +* Использование тасков в C# 55 +http://sonyks2007.blogspot.com/2013/11/c_11.html 25 25 26 - ====== Обратные ссылки: ======57 +**Taskcompletionsource** 27 27 28 -{{velocity}} 29 -#set ($links = $doc.getBacklinks()) 30 -#if ($links.size() > 0) 31 - #foreach ($docname in $links) 32 - #set ($rdoc = $xwiki.getDocument($docname).getTranslatedDocument()) 33 - * [[$escapetool.xml($rdoc.fullName)]] 34 - #end 35 -#else 36 - No back links for this page! 37 -#end 38 -{{/velocity}} 59 +Материалы: 39 39 40 ----- 61 +* В чем смысл TaskCompletionSource<T> и когда его лучше использовать? 62 +https://ru.stackoverflow.com/questions/780270/В-чем-смысл-taskcompletionsourcet-и-когда-его-лучше-использовать 63 + 64 +Книги: 65 + 66 +* [[Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование. | O’Reilly>>doc:Книги.O’Reilly.Асинхронное программирование в C# 5\.0 | O’Reilly.WebHome]] 67 +* [[Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование. | O’Reilly>>doc:Книги.O’Reilly.Конкурентность в C#\. Асинхронное, параллельное и многопоточное программирование\. | O’Reilly.WebHome]] 68 + 69 +
- XWiki.XWikiComments[0]
-
- Комментарий
-
... ... @@ -1,6 +1,8 @@ 1 1 При использовании CancellationToken не забывать оборачивать вызов в 2 -{{code language="c#"}}try 2 +{{code language="c#"}} 3 +try 3 3 { 4 4 CancelableOperation(tocken); 5 5 } 6 -catch(OperationCanceledException ex){}{{/code}} 7 +catch(OperationCanceledException ex){} 8 +{{/code}}
- XWiki.XWikiComments[1]
-
- Автор
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.cccc1808 - Комментарий
-
... ... @@ -1,1 +1,0 @@ 1 -Разобрать группу, вынести общие темы в раздел архитектуры. - Дата
-
... ... @@ -1,1 +1,0 @@ 1 -2022-12-31 12:29:23.113