Многопоточность и асинхронность - Потоки и задачи 

Page / - Изменено Alexandr Fokin в 2022/07/29 02:35 

Потоки и задачи 
Изменено Alexandr Fokin
в 2022/07/29 02:35

Оглавление
Thread and Task
Потоки переднего плана и фоновые потоки

Thread and Task
 	 	 	
Thread Pool	Пул потоков	Одна из задач пула - более оптимальное использование потоков, переиспользование.
Операция создания потока является относительно дорогой, поэтому с точки зрения производительности более выгодно может быть переиспользовать один и тот же поток, последовательно выполняя несколько Task (задач).	
Thread	Поток исполнения	Поток исполнения в приложении.
Если несколько потоков взаимодействуют с одним и тем-же объектом параллельно, может возникнуть необходимость использования конструкций для синхронизации (Многопоточность и асинхронность).
Любой объект можно оценить с точки зрения Thread-Safe (потокобезопасности). Например безопасен на только на чтение, но не на запись.	
Task	Задача	Логическая задача, которая может выполниться в Thread (потоке) из Thread Pool (пула потоков).
Для Task (задачи), которые будет выполняться длительное время стоит использовать метку.
c# Task API является более предпочтительным перед Thread API.
(При этом есть специфичные настройки, например возможность пометить задачу как долго выполняющуюся, чтобы пул потоков учитывал это в своей работе).	

Материалы:
•	Использование тасков в C#
http://sonyks2007.blogspot.com/2013/11/c_11.html
•	Understanding Worker Thread And I/O Completion Port (IOCP)
https://www.c-sharpcorner.com/article/understanding-worker-thread-and-io-completion-port-iocp/
•	Understanding Thread Starvation in .NET Core Applications
https://www.c-sharpcorner.com/article/understanding-thread-starvation-in-net-core-applications/
•	Станислав Сидристый — Тонкие настройки стандартного ThreadPool
https://www.youtube.com/watch?v=zeWhoFWGWKo

Потоки переднего плана и фоновые потоки
 	 	
Потоки переднего плана (foreground threads)	Приложение не будет остановлено, пока живы потоки переднего плана (Если это не экстренное завершение).	
Фоновые потоки (background threads)	Наличие запущенных фоновых потоков не препятствует завершению приложения.
Task запущенный на обработку через API  Task.Run(...) скорее всего попадет на выполнение в фоновый поток.	
//Проверка параметра фонового потока
Thread.CurrentThread.IsBackground
Потоки переднего плана и фоновые потоки
https://professorweb.ru/my/csharp/thread_and_files/1/1_6.php