Thread → Task. Многопоточность и Асинхронность

  Рет қаралды 26,855

Архитектор ПО. Александр Желнин

Архитектор ПО. Александр Желнин

Жыл бұрын

В этом видео расскажу о thread, многопоточности, task и асинхронности, чем многопоточность отличается от асинхронности.
была ли асинхронность в thread, а так же мелкие вопросы из собеседований.

Пікірлер: 85
@user-fu4gd8mm8p
@user-fu4gd8mm8p Жыл бұрын
как классно что видео не длится 3 часа и там четко по теме с собесов
@sherzodsadiev2751
@sherzodsadiev2751 Жыл бұрын
Александр, большое спасибо! Очень доступно объясняете
@Kulibins1
@Kulibins1 Жыл бұрын
Рад что нравится.
@krahmaletskrakmalets7587
@krahmaletskrakmalets7587 Жыл бұрын
Супер актуальное видно. Действительно, на собеседованиях очень большое внимание уделяют многопоточности и ассинхронности👍
@Kulibins1
@Kulibins1 Жыл бұрын
Рад что полезно 😉
@alexlightweight
@alexlightweight Жыл бұрын
а еще вы...ываются этим очень много на собеседованиях и даже самоутверждаются )))
@Anton-Os
@Anton-Os 9 ай бұрын
Спасибо огромное за разъяснение: чётко и просто. Особенно понравились картинки со стиральной машинкой- сразу стало понятно )
@Kulibins1
@Kulibins1 9 ай бұрын
🤗
@vm7738
@vm7738 Жыл бұрын
Очень круто и интересно рассказано! Спасибо!
@Kulibins1
@Kulibins1 Жыл бұрын
Всегда пожалуйста 😊
@qwerty89993
@qwerty89993 3 ай бұрын
Большое спасибо! Очень помогли
@vinogradova619
@vinogradova619 Жыл бұрын
Спасибо всё понятно и полезно 👍
@Kulibins1
@Kulibins1 Жыл бұрын
Всегда пожалуйста 😉
@trippie7014
@trippie7014 Жыл бұрын
Информативное видео, спасибо
@Kulibins1
@Kulibins1 Жыл бұрын
Всегда пожалуйста
@torrvic1156
@torrvic1156 3 ай бұрын
Спасибо за информативность! Никогда не знал, что в Яве нет нормальной асинхронности. И картинка с собаками смешная :)
@Kulibins1
@Kulibins1 3 ай бұрын
Всегда пожалуйста
@user-hz3nf6xh1h
@user-hz3nf6xh1h Жыл бұрын
Очень крутое объяснение , разобрался 👍
@Kulibins1
@Kulibins1 Жыл бұрын
Рад что понравилось 🤗
@trash2trash
@trash2trash Жыл бұрын
Ну ждем новый видос)
@trash2trash
@trash2trash Жыл бұрын
Ты запутал еще больше тему. Task это задание, которое встает в очередь на выполнение к планировщику ThreadPool. Помогая уйти от работы с Thread классом напрямую. Также Task может стартануть ваш код и на отдельном Thread , который не управляется через ThreadPool. Выбор за вами. Если вспомнить как надо обсулживать входные, выходные и ошибки для Thread , то лучше переходить на Task.
@Kulibins1
@Kulibins1 Жыл бұрын
А так же task можно выполнить синхронно. Цель была рассказать как мы пришли к task и что под капотом thread
@trash2trash
@trash2trash Жыл бұрын
@@Kulibins1 ну вводная часть путает, что и зачем создано и для каких задач использовать. Про ThreadPool вообще крохи. А ведь все ради этого механизма танцы с бубном. Чтобы использовать умный планировщик в его составе, а не городить потоки и убивать производительность процеесора.
@Kulibins1
@Kulibins1 Жыл бұрын
@@trash2trash это больше для новичков, и работу с пулом буду в отдельном видео записывать, там много тонкостей.
@vitaliyzayats
@vitaliyzayats Жыл бұрын
Спасибо за информацию! Расскажи, пожалуйста, тему событий и потоков - как оповещать подписчиков событий параллельно и асинхронно.
@Kulibins1
@Kulibins1 Жыл бұрын
Записал в список новых роликов
@user-oe3es3dx6d
@user-oe3es3dx6d Жыл бұрын
Ничего себе. Настолько понятного объяснения ранее ещё не находил. Спасибо большое!
@Kulibins1
@Kulibins1 Жыл бұрын
Всегда пожалуйста
@ivanb8662
@ivanb8662 Жыл бұрын
Равзе в Java Spring @EnableAsync и @Async не тоже самое, что async/await?
@Kulibins1
@Kulibins1 Жыл бұрын
Надо посмотреть, но по моему нет. Ps: Посмотрел - это не то, какой-то кривой костыль, ну либо я не понял, но вы даже не вызовете @async из того же класса где он определён.
@ivanb8662
@ivanb8662 Жыл бұрын
@@Kulibins1 Так можно kzbin.info/www/bejne/poWygmmif7Cim8U
@pavelpavel7938
@pavelpavel7938 Жыл бұрын
Надо было начать обьяснение асинка с того, что существуют различные виды работ, а не только выполнение кода на треде. И вот имеено для этих видов работ асинк и будет полезен.
@Kulibins1
@Kulibins1 Жыл бұрын
Может быть, но суть этого видео: рассказать немного истории, и показать потоки и ассинхронность + каждый по разному одно и тоже показывает
@semen083
@semen083 Жыл бұрын
Вроде бы через Task можно перекрыть реализацию многих кейсов, которые раньше надо было делать через Thread, и вроде как можно было бы вообще от Thread отказаться, но есть ли случаи, которые можно решить исключительно только с помощью Thread?
@Kulibins1
@Kulibins1 Жыл бұрын
Да когда все потоки в пуле потоков заняты, а поток всё-таки хочется выполнить, не переписывая шеделер тасков (реально упирался в количество), но действительно сейчас потоки редко где встретишь. Цель этого видео рассказать как развивалась многопоточность и асинхронность.
@VideoContentProduction
@VideoContentProduction Жыл бұрын
Треды более низкоуровневые. Если грамотно их создавать они будут быстрее. Но с ними код тяжелый для чтения
@torrvic1156
@torrvic1156 3 ай бұрын
@@Kulibins1моё субъективное мнение исключительно, но почему бы не использовать английский язык для обозначения специфических терминов. Всё-таки язык в основе именно английский и приходится гадать, а что такое шеделер, который видимо scheduler, если я правильно догадался.
@Kulibins1
@Kulibins1 3 ай бұрын
@@torrvic1156 если вы откроете яндекс переводчик и проиграете scheduler, то услышите шедулер, похоже скедулер это американское произношение планировщика. Уже был ролик про термины, где в комментах это обсудили
@torrvic1156
@torrvic1156 3 ай бұрын
@@Kulibins1 дело ваше конечно, но вот scheduler бы поняли и те кто британское произношение знают и те, кто более знаком с американским произношением, распространённым в США.
@lolik_20
@lolik_20 2 ай бұрын
1. bool complEted, а не int complited 2. для completed можно создать публичный гетер и сделать приватный сетер
@mikhail8596
@mikhail8596 Жыл бұрын
Бля, это божественно, спасибо добрый человек 😊
@Kulibins1
@Kulibins1 Жыл бұрын
Всегда пожалуйста. Скоро похожее по фронту будет
@user-sy9sg2fv6k
@user-sy9sg2fv6k Жыл бұрын
Спасибо Вам за видео! Вы не занимаетесь обучением С# случайно?)
@Kulibins1
@Kulibins1 Жыл бұрын
Всегда пожалуйста, обучением не занимаюсь - канал хобби 😉
@user-sy9sg2fv6k
@user-sy9sg2fv6k Жыл бұрын
@@Kulibins1 Принял, спасибо!
@RedkeiGost
@RedkeiGost Жыл бұрын
А в Java разве не виртуальная парралельность на их виртуальной машине? Или её тоже можно рассматривать как среду выполнения типа ОС? Я мимо-джаваскрипто-ангулар-мака-крокодил
@Kulibins1
@Kulibins1 Жыл бұрын
С точки зрения сравнения java и .net принцип их очень близок - есть виртуальная машина выполняющая некоторый код, не нативный, а как бы на своём языке абстрактного процессора, но в .net он компилируется в нативный, а потом выполняется, а вот в java он изначально интерпретируемый (наверное уже тоже может компилироваться)
@RedkeiGost
@RedkeiGost Жыл бұрын
@@Kulibins1 я с джавой давно сталкивался, когда писал на nativescript. В андроиде там не оригинальная джава-машина и опять наверное свои нюансы. Мне просто немного резануло слух слово о ОС. Но опять же, я хлебушек-фронтендер, как был джавскриптчиком, так и остался. И мало ли что мне резануло.
@RedkeiGost
@RedkeiGost Жыл бұрын
@@Kulibins1 но в джава как раз количество потоков неограничено, даже на одном ядре т.е. они виртуальные и виртуальная машина разруливает ресурсы между ними. И как раз говорили, что поток - дорогое удовольствие, лишний раз его заводить не стоит и поэтому лучше использовать паттерн ТредПулл, чтобы завести небольшое число потоков, и в них асинхронные задачи разруливать. Там таже очередь и тот же луп, что и в джаваскпит, только потоков не один. А вы наоборот говорите, что ТредПулл позволяет использовать максимальное количество потоков, сколько предложит система.
@Kulibins1
@Kulibins1 Жыл бұрын
@@RedkeiGost любые действия не бесплатны, и . net у вас потоков ну очень много. И java не может сделать свои потоки, потоки всегда это прерогатива OS. Тут такое дело операционка может не давать вам потоки, тогда они будут запускаться последовательно, но это только на какой-нибудь кофеварке 🤣
@velfex
@velfex Жыл бұрын
Информативное видео! Можно немного больше кода, а так все доступно объясняете. И было бы здорово осветить вот эти методы и понятия: GetAwaiter /GetResult, ConfigureAwait(true/fals), SynchronizationContext
@Kulibins1
@Kulibins1 Жыл бұрын
Это все в планах на запись 😉
@NeoJohnSmit
@NeoJohnSmit 4 ай бұрын
В JavaScript асинхронность работает по многопоточной модели. То есть выполнение двух асинхронных операций будет параллельной. Но асинхронность или многопточность это задача не JavaScript, а host-платформы в которой он исполняется, поскольку это скриптовый язык не имеющий ввода/вывода. В EcmaScript спецификации есть все необходимые нормы для выполнения кода в более чем один поток.
@Kulibins1
@Kulibins1 4 ай бұрын
Не работает параллельно, можете привести и хоть один пример? В js event loop
@Kulibins1
@Kulibins1 4 ай бұрын
@@NeoJohnSmit если вы про web worker (background worker), то это запуск отдельного процесса, со всеми вытекающими. Обычными средствами promise (под капотом постановка в очередь микрозадачь) или setTimeout(под капотом постановка в очередь макрозадачь) то оно параллельно не выполняется
@NeoJohnSmit
@NeoJohnSmit 4 ай бұрын
@@Kulibins1 Абсолютно все, что вы сейчас написали ником образом не соответствует действительности. Поэтому моя статья поможет вам разобраться.
@Kulibins1
@Kulibins1 4 ай бұрын
@@NeoJohnSmit Очень хочется почитать статью. если ссылку не получается кинуть, можно скинуть не полную (без хабра) или в мою группу телеграм.
@june3878
@june3878 Жыл бұрын
хорошо тем, кто придумывал велосипеды, а потом для него внедрили удобный функционал. Когда человек приходит и начинает пользоваться сразу этим удобным функционалом, то ему немного сложно осознать, какую проблему решает этот функционал.
@Kulibins1
@Kulibins1 Жыл бұрын
Не понял, про какие велосипеды идёт речь?
@june3878
@june3878 Жыл бұрын
@@Kulibins1 ну про те, которые вы в видео упоминали. О создании своей асинхронности
@trash2trash
@trash2trash Жыл бұрын
Еще хотел сказать про потоки. Тут есть заблуждение. Потоки есть в user и kernel среде. Поток создается внутри user space и может быть переведен к kernel space.
@Kulibins1
@Kulibins1 Жыл бұрын
В этом видео я в глубину потоков не опускался.
@user-tn4js4ys2f
@user-tn4js4ys2f Жыл бұрын
@@Kulibins1 либо первый раз слышу про это)
@Kulibins1
@Kulibins1 Жыл бұрын
@@user-tn4js4ys2f Тут когда вы работаете с потоками на уровне .net вы работаете с пользовательскими потоками. На данный момент в kernal среду вы попадёте при написании драйверов (в своё время на c++ делал небольшой драйвер). Так что не понял вашего вопроса/ответа
@zergzerg4844
@zergzerg4844 Жыл бұрын
Я чето не понял. Если Task это надстройка над Thread то в каком потоке он будет выполнятся, если вы говорите что Task это не о многопоточности? Что-то я смысл не уловил.
@Kulibins1
@Kulibins1 Жыл бұрын
Task это надстройка, и она даёт вам возможность писать асинхронный код, как показал, поток будет браться из специального пула. Код выполняемый Task будет по факту выполняться параллельно, вы можете просто Task.Run запускать такой код, аналогичтоно Thread.Start. а в каком потоке будет код из Task выполняться вы можете посмотреть из этого кода используя Thread.CurrentThread
@user-nv6gj6hg2s
@user-nv6gj6hg2s Жыл бұрын
Потому что Task - это не надстройка на Thread, а вполне отдельная тема, о чем пишут во многих англоязычных источниках. Автор чуточку заблуждается)
@zergzerg4844
@zergzerg4844 Жыл бұрын
@@user-nv6gj6hg2s Если не надстройка, то обёртка или это тоже не верно?
@Kulibins1
@Kulibins1 Жыл бұрын
@@user-nv6gj6hg2s Тут как раз все думают что task это отдельная тема, а на самом деле нет. На самом деле у вас нет ни какой возможности выполнять параллельный код без потоков, и task внутри себя использует потоки - то что я в этом видео и говорю. И то что с помощью него создают асинхронный код тоже рассказываю 😋
@DV-og5ue
@DV-og5ue 5 ай бұрын
Картинка на 1:12 имеет отсылку к concurrency: слева параллельное выполнение, справа - конкурентное. Ничего тут плохого нет
@Kulibins1
@Kulibins1 5 ай бұрын
Картинка как пример для объяснения
@limeniye
@limeniye Жыл бұрын
Что такое асинхронность - понятно и студенту. Я ждал разбор: как работает асинхронность. Этого не было. Ведь есть поток, есть таск. Таск выполяется в одном из пулла потоков асинхронно. То есть выполнение в другом потоке - не асинхронность. Так что же тогда такое "асинхронность" с точки зрения внутренней реализации?
@Kulibins1
@Kulibins1 Жыл бұрын
Асинхронность это больше паттерн, и с точки зрения Task он так же сделан через потоки. Асинхронность может работать когда мы даём работу другому сервису, а потом от неготполучаем результат. В результат асинхронного вычисления мы получаем через callback, и для удобства используем async await синтаксис, который является синтаксическим сахаром для callback. А то что это все понятно даже студенту, так студенты есть разные, я тут программистов видел кто рекурсию не знает 🤣
@limeniye
@limeniye Жыл бұрын
@@Kulibins1 ну и что, что мы можем получить результат от Таска? От Потока мы тоже можем получить результат)
@Kulibins1
@Kulibins1 Жыл бұрын
@@limeniye поэтому я и говорю что асинхронность это больше паттерн. Но и многопоточность это тоже паттерн, где мы одну задачу разбиваем на куски и часто решаем её параллельно несколькими потоками. Главное что в .net асинхронность сделана через потоки, в отличии например от JS
@VideoContentProduction
@VideoContentProduction Жыл бұрын
@@limeniye Есть определенные проблемы с обслуживанием потоков. Количество ядер процессора ограниченно, поэтому в какой то момент создание дополнительных потоков приводит снижению производительности. Чтобы обойти эту проблему придумали threadpool. Теперь рантайм сам решает какое оптимальное количество потоков можно создать. Вторая проблема в том, что получение данных происходит гораздо медленнее чем их обработка. Поэтому поток большую часть времени тупо ждет данные и ничего не делает. Чтобы решить эту проблему придумали Task. Смысл таска в том, чтобы вернуть поток в пул пока он не нужен.
@romanrakzin2518
@romanrakzin2518 Жыл бұрын
я думал - async/await сперва был в node.js - позже уже c# это перенял
@Kulibins1
@Kulibins1 Жыл бұрын
А оказалось наоборот 😉
@kitsunofflmao9980
@kitsunofflmao9980 Жыл бұрын
Однако async await под капотом в ноде это совсем другая штука, потому что нода однопоточная
@Kulibins1
@Kulibins1 Жыл бұрын
@@kitsunofflmao9980 естественно. Тут была суть в асинхронном коде. А как это реализована в разных платформах, быду в других виде рассказывай. Только в моём случае это будет не nodejs, а обычный js/ts код из Angular (браузер)
@user-gy4pg5dg8k
@user-gy4pg5dg8k Жыл бұрын
♥ Спасибо за видео! Нашел видео с примером создания программы с многопоточностью kzbin.info/www/bejne/jmakqaiKatmVkJY ☻
@Kulibins1
@Kulibins1 Жыл бұрын
Подписался 😉
@nyannyan8243
@nyannyan8243 Жыл бұрын
"Как только в своей программе вы написали new Thread() - все кончено, ваша программа теперь содержит устаревший код. " (c) Stephen Cleary, Microsoft MVP and the author of "Concurrency in C# Cookbook"
@Kulibins1
@Kulibins1 Жыл бұрын
Понятно что сейчас всё через Task делают. Тут же рассказываю как мы к Task пришли 😁
Как устроена многопоточность в .net
25:34
Архитектор ПО. Александр Желнин
Рет қаралды 6 М.
.net7 C# vs Golang. Сравнение производительности
16:13
Архитектор ПО. Александр Желнин
Рет қаралды 7 М.
1🥺🎉 #thankyou
00:29
はじめしゃちょー(hajime)
Рет қаралды 56 МЛН
Pray For Palestine 😢🇵🇸|
00:23
Ak Ultra
Рет қаралды 20 МЛН
CAN YOU HELP ME? (ROAD TO 100 MLN!) #shorts
00:26
PANDA BOI
Рет қаралды 36 МЛН
Вопросы собеседования на C# программиста
21:04
Програмысли Влог
Рет қаралды 61 М.
Асинхронное программирование на C# (блок 1)
1:01:53
Просто программист
Рет қаралды 4,8 М.
Что должен знать C# Junior разработчик?
9:33
Sergey Nemchinskiy
Рет қаралды 89 М.
async/await в ASP.NET Core. Асинхронный код
27:42
Семен Алексеев
Рет қаралды 28 М.
Что такое JSON
7:45
Дмитрий Ченгаев. Веб-разработка.
Рет қаралды 119 М.
Почему Angular
18:40
Архитектор ПО. Александр Желнин
Рет қаралды 8 М.
1🥺🎉 #thankyou
00:29
はじめしゃちょー(hajime)
Рет қаралды 56 МЛН