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

  Рет қаралды 17,022

Andrey Shyrokoriadov

Andrey Shyrokoriadov

Күн бұрын

Пікірлер: 67
@alexvetrov3438
@alexvetrov3438 2 жыл бұрын
Одно из самых понятных объяснений, спасибо!
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 жыл бұрын
Спасибо за комментарий!
@17madjoker47
@17madjoker47 3 жыл бұрын
Мужик ты крутой конечно, спасибо за информацию
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 жыл бұрын
Спасибо за комментарий👍
@СергейГончаров-у6у
@СергейГончаров-у6у 3 жыл бұрын
отдельное спасибо за объяснения на доп ресурсе с примером кода!
@it_catt
@it_catt 3 ай бұрын
Спасибо больше за объяснение! самое понятное объяснение
@ivannebyshinets5682
@ivannebyshinets5682 2 жыл бұрын
Отличный урок, спасибо!
@Antonina86
@Antonina86 3 жыл бұрын
Спасибо, Андрей, хороший контент без воды!!!
@РайкиТак
@РайкиТак 2 жыл бұрын
Спасибо большое !! Очень полезно! Рада , что нашла вас!
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 жыл бұрын
А я рад подписчикам - представителям прекрасной половины человечества. Их у меня на канале около 10%.
@РайкиТак
@РайкиТак 2 жыл бұрын
@@AndreyShyrokoriadov очень хорошо рассказано про потоки) Теперь у меня в голове все уложилось по полочкам) На эту базу уже можно читать Рихтера. Сразу без понимая всего та, часть книги, где он пишет про потоки не зашла.
@ОргПетров
@ОргПетров 3 жыл бұрын
Молодец! Хорошие видео делаешь! Продолжай в том же духе!👍
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 жыл бұрын
Спасибо! В планах - создание около 35 видео на тему C#, то есть ещё около 15 видео. А потом будут видео на другие темы информатики.
@olegholostenco8736
@olegholostenco8736 3 жыл бұрын
@@AndreyShyrokoriadov Спасибо за работу. С нетерпением жду следующих уроков =)
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 жыл бұрын
@@olegholostenco8736 я стараюсь публиковать новые видео каждую субботу с утра.
@Meisst
@Meisst 2 жыл бұрын
Спасибо за труд!
@Дмитрийсекрет-н7о
@Дмитрийсекрет-н7о 3 жыл бұрын
классный урок. Подготовка к собеседованию.
@yz777zhumabayev6
@yz777zhumabayev6 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 Жыл бұрын
Спасибо!
@РНС_Саакашвили
@РНС_Саакашвили Жыл бұрын
спасибо . . . поставил лайк
@minimalstory
@minimalstory 2 жыл бұрын
напомнило картинку, где у африканских детей в учебном классе были картонные компы.
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 жыл бұрын
😂😂😂
@vael6555
@vael6555 24 күн бұрын
Задействуется ли доп. поток во время исполнения асинхронного метода?
@redice8928
@redice8928 4 ай бұрын
А как async await раскрывается под капотом, и можно ли получить резалт без использования этих ключевых слов и без блокировки основного потока
@SoferPeOZN
@SoferPeOZN 3 жыл бұрын
Очень хотелось б узнать про mutex и semaphore от вас 🙂
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 жыл бұрын
Я немного прояснил ситуацию с mutex и semaphore в этом видео kzbin.info/www/bejne/rmLEnJhmZ9iaj5I
@motojpeg
@motojpeg 3 жыл бұрын
Ручка с изолентой? Для защиты от претензий бренда?))
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 жыл бұрын
В этом случае я не хотел рекламировать "бренд" :) По сути это ручка с логотипом одного из моих клиентов.
@IPmen10001
@IPmen10001 7 ай бұрын
Есть ли у вас лекция про асинк эвейт?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 7 ай бұрын
На сколько я помню, в моих видео нет видео посвященного исключительно ключевым словам async/await
@motojpeg
@motojpeg 3 жыл бұрын
Такая достаточно тихая и спокойная речь при подаче материалов убаюкивает))) А еще походу у Автора запись материала происходит в вечернее время, а тихая речь нужна для того, чтобы не разбудить спящих детей))
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 жыл бұрын
Интересное наблюдение. Вообще у меня просто тихий голос - это имеет свои преимущества и недостатки.
@glorglorsky7987
@glorglorsky7987 2 жыл бұрын
Непонятно про async await, await говорит нам о том, что тут надо дождаться выполнения задачи, и получается поток блокируется , до тех пор пока не будет выполнена задача? А в чем тогда проявляется асинхронность?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 жыл бұрын
Асинхронность хорошо видно в приложениях с интерфейсом пользователя. Попробуйте скачать файл или данные из веб услуги синхронно в потоке интерфейса пользователя (UI Thread). Приложение будет подвисать. Если программист оставить поток интерфейса пользователя в покое и основную работу приложения будет выполнять асинхронно в отдельных потоках, то приложение не будет подвисать. Когда асинхронная операция будет завершена, интерфейс пользователя буде обновлен. Во время выполнения асинхронной операции пользователь может спокойно взаимодействовать с интерфейсом пользователя и вызывать другие асинхронные операции, например одновременно скачивать или подгружать несколько файлов.
@glorglorsky7987
@glorglorsky7987 2 жыл бұрын
@@AndreyShyrokoriadov получается задача , например скачивание, или обработка, уйдет в тредпул. А пользователь будет работать с главным потоком?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 жыл бұрын
@@glorglorsky7987 да, Вы правильно поняли.
@anonym1548
@anonym1548 3 жыл бұрын
Андрей, объясните пожалуйста, как работать с очередью многопоточно. Допустим, есть очередь и её необходимо обрабатывать в 5 потоков. Как это лучше всего реализовать? Знаю есть класс ConcurrentQueue, но как с ним работать многопоточно, я не очень понимаю. Спасибо за видео, очень полезное!
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 жыл бұрын
Спасибо за подписку и комментарий. Обратите внимание на это видео kzbin.info/www/bejne/i6jSYZWvabR7oNU - там есть пример использования коллекции ConcurrentQueue. Код в этом видео доступен здесь: github.com/ashyrokoriadov/TelephoneExchange
@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 Спасибо за подробное разъяснение)
@IPmen10001
@IPmen10001 7 ай бұрын
Подскажите пожалуйста никак не могу понять. Есть метод асинхронный в Web API который возвращает какие то данные в методе стоит задержка на 10 сек. Так вот никак не могу понять клиент сразу получит ответ но он будет пустой т.е он получит таску без данных. Или если клиент задержится на странице то данные ему придут через секунд? Спасибо
@AndreyShyrokoriadov
@AndreyShyrokoriadov 7 ай бұрын
данные придут через "икс" секунд. В это время в интерфейсе пользователя будет какая то анимация символизирующая ожидание. То есть клиент ничего сразу не получит. Он получит данные, как только они будут готовы (после выполнения таска). А если таск настолько массивный, что он длится минуты или даже часы, то можно клиенту сразу вернуть статус 201 Accepted (естественно без данных). Когда таск будет выполнен об этом надо как-то проинфирмировать клиента (есть разные способы, например с помощью библиотеки SignalR). Сообщение клиенту будет содержатьинформацию о том, что такс закончился и данные можно скачать без задержек.
@IPmen10001
@IPmen10001 7 ай бұрын
@@AndreyShyrokoriadov спасибо большое за разъяснения 🤝
@notn9380
@notn9380 3 жыл бұрын
Подписался.
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 жыл бұрын
Большое спасибо.
@awdesawdeska6161
@awdesawdeska6161 3 жыл бұрын
Когда видео про обобщённые классы?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 3 жыл бұрын
kzbin.info/www/bejne/hp-wg5RvjLaejsk
@awdesawdeska6161
@awdesawdeska6161 3 жыл бұрын
@@AndreyShyrokoriadov спасибо
@Александр-и3й3д
@Александр-и3й3д Жыл бұрын
Чуш, начиная примерно с 8 минуты - async не делает метод асинхронным, а даёт возможность запустить в нём асинхронную операцию - в нем не обязательно вызвать через await что-то, его можно использовать как обычный метод
@AndreyShyrokoriadov
@AndreyShyrokoriadov Жыл бұрын
С удовольствием посмотрел бы видео с Вашей версией объяснения этой темы, но что-то у Вас на канале пустовато... Для такого претензионального заявления. Кстати словао "чушь" пишется с мягким знаком.
@aleksthomson9457
@aleksthomson9457 Жыл бұрын
бумажка и ручка? О_о
@AndreyShyrokoriadov
@AndreyShyrokoriadov Жыл бұрын
Конечно :)
@РНС_Саакашвили
@РНС_Саакашвили Жыл бұрын
не знаю кто удалил коммент поэтому повторю его
@РНС_Саакашвили
@РНС_Саакашвили Жыл бұрын
хочу вам подсказать что нужно изменить - с точки зрения начинающего программиста .. . вот вы говорите "существует 4 конструктора класса ПОТОК" . . . так вот когда вы излагаете при СИСТЕМНЫЕ конструкторы, свойства, методы, делегаты, расширения - нужно(на примере данного случая) показать на секунду вот эту страничку(тут адрес интернет-страницы Микрософта с одним из 4-х конструкторов потока) и продолжать излагать НА ПРИМЕРЕ таких или аналогичных сигнатур тогда начинающие будут знать как применить этто или подобное . . . ни у одного из блогеров этого нет(хотя некоторые периодически нажимают F12) . . . особенно это поможет когда там вообще нет примера - только сигнатура
@AndreyShyrokoriadov
@AndreyShyrokoriadov Жыл бұрын
@@РНС_Саакашвили Хороший и полезный комментарий. Спасибо.
@РНС_Саакашвили
@РНС_Саакашвили Жыл бұрын
@@AndreyShyrokoriadov тогда будет смотреть ПОИНТЕРЕСНЕЙ - ведь такие методы изложения нигде ни раскрыты(на других ресурсах)
@krb7159
@krb7159 2 жыл бұрын
А как узнать количество потоков в системе?
@AndreyShyrokoriadov
@AndreyShyrokoriadov 2 жыл бұрын
Если честно, я не знаю и я не никода не задвался этим вопросом. Если потоков не хватает, то наверное задания, которым не хватило, будут в ожидании, когда будут свободные потоки и такие азадания не будут выполняться. Если Вам интересно Вы можете поискать в англоязычной документации по .Net сколькими потоками может одновременно "жонглировать" .Net .
@SetAngelGreen
@SetAngelGreen 11 ай бұрын
У меня возник момент когда на одном ПК многократный вызов одного и того же Task мог выполнять их в разное время независимо друг от друга, а на другом, все Task (вызов одного и того же задания или же разные Task) встали в очередь и ожидали выполнение последовательно.
@dy0mber847
@dy0mber847 10 ай бұрын
​@@SetAngelGreenсколько у вас ядер на ПК из первого и на ПК из второго случая?
Thread → Task. Многопоточность и Асинхронность
13:39
Архитектор ПО. Александр Желнин
Рет қаралды 30 М.
💩Поу и Поулина ☠️МОЧАТ 😖Хмурых Тварей?!
00:34
Ной Анимация
Рет қаралды 2,1 МЛН
Вопросы собеседования на C# программиста
21:04
Програмысли Влог
Рет қаралды 66 М.