Тёмный
No video :(

#18 Многопоточность - Thread, ThreadPool, Task. Ответ на вопрос собеседования C# / .Net 

Andrey Shyrokoriadov
Подписаться 4,3 тыс.
Просмотров 17 тыс.
50% 1

#многопоточность #поток #процесс #thread #system.threading #threadpool #task #taskfactory #async #await #csharp #dotnet #andriyshyrokoriadov
В видео представлены способы создания потоков с использованием классов Thread, ThreadPool, Task, TaskFactory.
Обзор представлен в форме ответа на вопрос, который встречается на собеседованиях на позицию "программист C# / .Net".
Подписывайтесь на канал [программирование, путешествия]: / @andreyshyrokoriadov
0:10 - введение
0:55 - использование класса Thread
3:05 - использование класса ThreadPool
5:10 - использование класса Task
5:55 - использование класса TaskFactory
8:10 - использование ключевых слов async и await
9:40 - конвенция названий асинхронных методов
9:30 - атомарные и неатомарные операции
10:00 - дополнительные методы класса Task
Текст к фильму доступен по ссылке: ashyrokoriadov...
Дополнительная информация:
- документация Thread docs.microsoft...
- документация ThreadPool docs.microsoft...
- документация Task docs.microsoft...
- документация TaskFactory docs.microsoft...

Опубликовано:

 

21 авг 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 66   
@alexvetrov3438
@alexvetrov3438 2 года назад
Одно из самых понятных объяснений, спасибо!
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
Спасибо за комментарий!
@17madjoker47
@17madjoker47 3 года назад
Мужик ты крутой конечно, спасибо за информацию
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 года назад
Спасибо за комментарий👍
@user-xl8fx5ip1v
@user-xl8fx5ip1v 3 года назад
отдельное спасибо за объяснения на доп ресурсе с примером кода!
@it_catt
@it_catt 2 месяца назад
Спасибо больше за объяснение! самое понятное объяснение
@Antonina86
@Antonina86 2 года назад
Спасибо, Андрей, хороший контент без воды!!!
@user-qd6dd4tj9h
@user-qd6dd4tj9h 3 года назад
Молодец! Хорошие видео делаешь! Продолжай в том же духе!👍
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 года назад
Спасибо! В планах - создание около 35 видео на тему C#, то есть ещё около 15 видео. А потом будут видео на другие темы информатики.
@olegholostenco8736
@olegholostenco8736 3 года назад
@@AndreyShyrokoriadov Спасибо за работу. С нетерпением жду следующих уроков =)
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 года назад
@@olegholostenco8736 я стараюсь публиковать новые видео каждую субботу с утра.
@ivannebyshinets5682
@ivannebyshinets5682 2 года назад
Отличный урок, спасибо!
@РайкиТак
@РайкиТак 2 года назад
Спасибо большое !! Очень полезно! Рада , что нашла вас!
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
А я рад подписчикам - представителям прекрасной половины человечества. Их у меня на канале около 10%.
@РайкиТак
@РайкиТак 2 года назад
@@AndreyShyrokoriadov очень хорошо рассказано про потоки) Теперь у меня в голове все уложилось по полочкам) На эту базу уже можно читать Рихтера. Сразу без понимая всего та, часть книги, где он пишет про потоки не зашла.
@user-yo7mw6oj4p
@user-yo7mw6oj4p 3 года назад
классный урок. Подготовка к собеседованию.
@Meisst
@Meisst 2 года назад
Спасибо за труд!
@yz777zhumabayev6
@yz777zhumabayev6 2 года назад
Очень наглядно) Спасибо
@minimalstory
@minimalstory 2 года назад
напомнило картинку, где у африканских детей в учебном классе были картонные компы.
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
😂😂😂
@MishkinFedor
@MishkinFedor 3 года назад
Видео класс! Только не услышал про то в каких потоках выполняются Task. Если я не ошибаюсь, то за это отвечает сам фреймворк. Считается что фреймворк управляет потоками лучше и при использовании Task разработчику не надо думать о потоках.
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 года назад
Спасибо за комментарий и подписку. Если у Вас есть выбор что использовать: Thread, ThreadPool или Task, то конечно лучше использовать Task. О разнице между Thread и ThreadPool я по моему говорил в видео, а что касается ThreadPool и Task, то между ними разница следующая: при использовании Task Вы всегда знаете когда выполнение задания закончено, а при использовании ThreadPool нет встроенного способа определить закончено ли задание и какое значение было возвращено. Собственно этот недостаток ThreadPool послужил причиной появления концепции Task. В .Net есть такое понятие, как TaskScheduler - он отвечает за старт заданий и управляет заданиями в процессе их работы. TaskScheduler использует потоки из ThreadPool. То есть "под капотом" Вы и так используете ThreadPool, но теперь у Вас есть доступ к статусу задания (завершено/не завершено) и если задание завершено, то есть доступ к его результату. После того как я закончу серию видео о C# я планирую выпустить одно большее видео, которое будет называться Errata ("ошибки" на латинском языке) - в этом видео дам более детальные ответы на некоторые вопросы. Пока таких вопросов 3 (на основании комментариев зрителей) и среди них будет Ваш вопрос о том, в каких потоках выполняется Task.
@MishkinFedor
@MishkinFedor 3 года назад
Хорошо, спс, будем ждать видео
@ramil9209
@ramil9209 2 года назад
@@AndreyShyrokoriadov идея супер, такого действительно нет про разбор ошибок
@ramil9209
@ramil9209 2 года назад
@@AndreyShyrokoriadov планируете ли вы в будущем снимать уроки по обучению. Net core? Хотелось бы ещё видео о проведении ревью, рефакторинге кода, такое часто дают на собесах
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
@@ramil9209 видео о .net core уже есть на канале. Видео о ревью и рефакторинге - хорошая идея.
@C0ntrolDev
@C0ntrolDev Год назад
Спасибо!
@user-zd3qw7le5c
@user-zd3qw7le5c Год назад
спасибо . . . поставил лайк
@redice8928
@redice8928 3 месяца назад
А как async await раскрывается под капотом, и можно ли получить резалт без использования этих ключевых слов и без блокировки основного потока
@motojpeg
@motojpeg 2 года назад
Такая достаточно тихая и спокойная речь при подаче материалов убаюкивает))) А еще походу у Автора запись материала происходит в вечернее время, а тихая речь нужна для того, чтобы не разбудить спящих детей))
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
Интересное наблюдение. Вообще у меня просто тихий голос - это имеет свои преимущества и недостатки.
@motojpeg
@motojpeg 2 года назад
Ручка с изолентой? Для защиты от претензий бренда?))
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
В этом случае я не хотел рекламировать "бренд" :) По сути это ручка с логотипом одного из моих клиентов.
@glorglorsky7987
@glorglorsky7987 2 года назад
Непонятно про async await, await говорит нам о том, что тут надо дождаться выполнения задачи, и получается поток блокируется , до тех пор пока не будет выполнена задача? А в чем тогда проявляется асинхронность?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
Асинхронность хорошо видно в приложениях с интерфейсом пользователя. Попробуйте скачать файл или данные из веб услуги синхронно в потоке интерфейса пользователя (UI Thread). Приложение будет подвисать. Если программист оставить поток интерфейса пользователя в покое и основную работу приложения будет выполнять асинхронно в отдельных потоках, то приложение не будет подвисать. Когда асинхронная операция будет завершена, интерфейс пользователя буде обновлен. Во время выполнения асинхронной операции пользователь может спокойно взаимодействовать с интерфейсом пользователя и вызывать другие асинхронные операции, например одновременно скачивать или подгружать несколько файлов.
@glorglorsky7987
@glorglorsky7987 2 года назад
@@AndreyShyrokoriadov получается задача , например скачивание, или обработка, уйдет в тредпул. А пользователь будет работать с главным потоком?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
@@glorglorsky7987 да, Вы правильно поняли.
@SoferPeOZN
@SoferPeOZN 3 года назад
Очень хотелось б узнать про mutex и semaphore от вас 🙂
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 года назад
Я немного прояснил ситуацию с mutex и semaphore в этом видео ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-x1ake02sgY0.html
@IPmen10001
@IPmen10001 6 месяцев назад
Есть ли у вас лекция про асинк эвейт?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 6 месяцев назад
На сколько я помню, в моих видео нет видео посвященного исключительно ключевым словам async/await
@anonym1548
@anonym1548 2 года назад
Андрей, объясните пожалуйста, как работать с очередью многопоточно. Допустим, есть очередь и её необходимо обрабатывать в 5 потоков. Как это лучше всего реализовать? Знаю есть класс ConcurrentQueue, но как с ним работать многопоточно, я не очень понимаю. Спасибо за видео, очень полезное!
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
Спасибо за подписку и комментарий. Обратите внимание на это видео ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-Uwo0by4OHjs.html - там есть пример использования коллекции ConcurrentQueue. Код в этом видео доступен здесь: github.com/ashyrokoriadov/TelephoneExchange
@IPmen10001
@IPmen10001 5 месяцев назад
Подскажите пожалуйста никак не могу понять. Есть метод асинхронный в Web API который возвращает какие то данные в методе стоит задержка на 10 сек. Так вот никак не могу понять клиент сразу получит ответ но он будет пустой т.е он получит таску без данных. Или если клиент задержится на странице то данные ему придут через секунд? Спасибо
@AndreyShyrokoriadov
@AndreyShyrokoriadov 5 месяцев назад
данные придут через "икс" секунд. В это время в интерфейсе пользователя будет какая то анимация символизирующая ожидание. То есть клиент ничего сразу не получит. Он получит данные, как только они будут готовы (после выполнения таска). А если таск настолько массивный, что он длится минуты или даже часы, то можно клиенту сразу вернуть статус 201 Accepted (естественно без данных). Когда таск будет выполнен об этом надо как-то проинфирмировать клиента (есть разные способы, например с помощью библиотеки SignalR). Сообщение клиенту будет содержатьинформацию о том, что такс закончился и данные можно скачать без задержек.
@IPmen10001
@IPmen10001 5 месяцев назад
@@AndreyShyrokoriadov спасибо большое за разъяснения 🤝
@notn9380
@notn9380 3 года назад
Подписался.
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 года назад
Большое спасибо.
@shkippitor1895
@shkippitor1895 2 года назад
Спасибо за видео. Когда мы создаем класс Thread, мы создаем прямо отдельный поток или же как бы берем его из ThreadPool? И по поводу работы Task хотелось бы уточнить, получается мы задаем какую то операцию нашей задачи, она арендует поток из ThreadPool, выполняет вычисление, как только вычисление завершено, передает результат исполнения в арендованный поток и затем его снова возвращает в ThreadPool?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
Спасибо за комментарий. Моё пониманием такое: количество потоков ограничено. Просто если вы берете поток через класс Thread, Вы можете попасть в ситуацию, когда доступных потоков просто не будет и в приложении появится ошибка. ThreadPool это как бы надстройка над потоками и он за нас решает проблемы связанные с использованием потоков: "выдает" нам потоки, "забирает" их обратно, когда работа в потоке выполнена. Что касается ThreadPool и Task, то между ними разница следующая: при использовании Task Вы всегда знаете когда выполнение задания закончено, а при использовании ThreadPool нет встроенного способа определить закончено ли задание и какое значение было возвращено. Собственно этот недостаток ThreadPool послужил причиной появления концепции Task. В .Net есть такое понятие, как TaskScheduler - он отвечает за старт заданий и управляет заданиями в процессе их работы. TaskScheduler использует потоки из ThreadPool. То есть "под капотом" Вы и так используете ThreadPool, но теперь у Вас есть доступ к статусу задания (завершено/не завершено) и если задание завершено, то есть доступ к его результату.
@shkippitor1895
@shkippitor1895 2 года назад
@@AndreyShyrokoriadov Спасибо за подробное разъяснение)
@awdesawdeska6161
@awdesawdeska6161 3 года назад
Когда видео про обобщённые классы?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 года назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PnMRa9WQkXg.html
@awdesawdeska6161
@awdesawdeska6161 3 года назад
@@AndreyShyrokoriadov спасибо
@user-zd3qw7le5c
@user-zd3qw7le5c Год назад
не знаю кто удалил коммент поэтому повторю его
@user-zd3qw7le5c
@user-zd3qw7le5c Год назад
хочу вам подсказать что нужно изменить - с точки зрения начинающего программиста .. . вот вы говорите "существует 4 конструктора класса ПОТОК" . . . так вот когда вы излагаете при СИСТЕМНЫЕ конструкторы, свойства, методы, делегаты, расширения - нужно(на примере данного случая) показать на секунду вот эту страничку(тут адрес интернет-страницы Микрософта с одним из 4-х конструкторов потока) и продолжать излагать НА ПРИМЕРЕ таких или аналогичных сигнатур тогда начинающие будут знать как применить этто или подобное . . . ни у одного из блогеров этого нет(хотя некоторые периодически нажимают F12) . . . особенно это поможет когда там вообще нет примера - только сигнатура
@AndreyShyrokoriadov
@AndreyShyrokoriadov Год назад
@@user-zd3qw7le5c Хороший и полезный комментарий. Спасибо.
@user-zd3qw7le5c
@user-zd3qw7le5c Год назад
@@AndreyShyrokoriadov тогда будет смотреть ПОИНТЕРЕСНЕЙ - ведь такие методы изложения нигде ни раскрыты(на других ресурсах)
@aleksthomson9457
@aleksthomson9457 Год назад
бумажка и ручка? О_о
@AndreyShyrokoriadov
@AndreyShyrokoriadov Год назад
Конечно :)
@user-yn2fk2gk3l
@user-yn2fk2gk3l Год назад
Чуш, начиная примерно с 8 минуты - async не делает метод асинхронным, а даёт возможность запустить в нём асинхронную операцию - в нем не обязательно вызвать через await что-то, его можно использовать как обычный метод
@AndreyShyrokoriadov
@AndreyShyrokoriadov Год назад
С удовольствием посмотрел бы видео с Вашей версией объяснения этой темы, но что-то у Вас на канале пустовато... Для такого претензионального заявления. Кстати словао "чушь" пишется с мягким знаком.
@krb7159
@krb7159 2 года назад
А как узнать количество потоков в системе?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 года назад
Если честно, я не знаю и я не никода не задвался этим вопросом. Если потоков не хватает, то наверное задания, которым не хватило, будут в ожидании, когда будут свободные потоки и такие азадания не будут выполняться. Если Вам интересно Вы можете поискать в англоязычной документации по .Net сколькими потоками может одновременно "жонглировать" .Net .
@SetAngelGreen
@SetAngelGreen 9 месяцев назад
У меня возник момент когда на одном ПК многократный вызов одного и того же Task мог выполнять их в разное время независимо друг от друга, а на другом, все Task (вызов одного и того же задания или же разные Task) встали в очередь и ожидали выполнение последовательно.
@dy0mber847
@dy0mber847 9 месяцев назад
​@@SetAngelGreenсколько у вас ядер на ПК из первого и на ПК из второго случая?
Далее