Многопроцессность, многопоточность, асинхронность в Python и не только. Что это и как работает?
Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
Telegram: t0digital.t.me
Сказать спасибо за это видео можно здесь - boosty.to/digitalize.team
Сегодняшний выпуск - о том, как заставить наше приложение летать! Поговорим о процессорах, о том, как они работают, о многоядерных CPU и Hyper-Threading, о процессах, потоках и многопоточности, а также об асинхронности или кооперативной многозадачности. Будет насыщенно!
0:00 О чём пойдёт речь
0:30 О многозадачности на единственном ядре CPU
1:42 О тактовой частоте процессоров и многоядерных CPU
3:07 Потоки, они же Threads
4:26 Состояние гонки, оно же race condition
5:20 Hyper-Threading и гипер-потоки
7:56 Потоки на многоядерных CPU
8:24 GIL в Python
9:16 Как обслужить тысячу HTTP запросов?
10:09 Асинхронность, кооперативная многозадачность
14:20 Как работает асинхронность
15:31 Выводы
/****************** about ******************/
Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
- Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
- Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
Если у вас есть проект на разработку, пишите нам на hi@digitalize.team.
С другими предложениями, а также если вам нужна одна или несколько индивидуальных консультаций/уроков по разработке (3000 руб/час), пишите мне на alexey@salesbeat.pro.
Telegram канал - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...
Пікірлер: 734
Мой курс «Хардкорная веб-разработка» - course.to.digital Вжух!
Тема интересная, ждем продолжения.
Спасибо за ликбез по мультипоточности ядер) "Немножко" дополню/скорректирую в режиме зануды: 1:00 Процесс и поток на процессоре может быть один, когда нет ОС. Это кучу МК (микроконтроллеров) и им подобных процов. Даже на х86 можно запустить монопроцесс и, обычно, вы его пускаете. BIOS Based I/O system не редко однопоточна+однопроцессна (но может мои данные устарели) 1:20 я бы прям в начале уточнил разницу между "работает" и "выполняется" ("исполняется"). Состояния ожидания тоже работа (это вам не зомби) и одновременно реально работать без переключений могут сотни процессов, а вот с выполнением да, только один в один фрейм исполнения. Хотя кому-то наоборот "программа исполняется" это существование процесса, а "программа работает" это греет воздух, трасформируя данные 3:20 строго говоря у программы может быть и 0 (ноль) потоков/процессов. Пример -- скрипты, которые не оперируют потоками/процессами, а исполняются родительским интерпретатором. 3:40 программа != процесс, 4:00 потоки так-то бывают разные и на сколько я знаю у потоков могут быть свои адресные пространства, но не уверен. Надо изучить что в каких ОС 4:36 гонки потоков можно, как избегать рядом подходов в мультипоточном прог-ии, так и исключать, так что проблема не совсем понятно, зачем сюда внесена, но при этом даже о законе Абеля ни слова( Часть про простаивающие ядра оставляю на совести автора, там у меня нет знаний, за тем и смотрел =) 12:43 асинхронность, а точнее асихронное программирование либо асихронное выполнение это *один из* способов решить проблему, как достичь большой отдачи на малом числе ядер/потоков. В принципе можно и 10к дескрипторов потоков создать и нихай ОС сама их рулит, если поток умеет переходить в ожидание, то даже разрулит) 14:10 высокоэффективные ли? Если замерять RPS, то с высокой верятностью при идентичной задаче JS можно отточить не лучше питона, тот не лучше явы (иногда питон быстрее даже правильно "сваренной" явы), а эти ребята всё равно уступят Go/RUST/C++/Fortran (я счас о пределе, который можно выжать, а не о качестве библиотек, которые делают разрыв обычно ещё сильнее) Эффективно на тех же JS/Python писать ёмкий код (мало строк, много логики и смысла), но тут ни JIT, ни процессоры, ни ОС ни при чём 14:50 это упрощение сродни Пи = 3, простите. EL исполняет задачи из очереди на исполнение по мере завершения исполнения текущих задач (в частности для JS это по одной задаче), а задачи, завершаемые не выходом, а переходом в ожидание, по мере удовлетворения ожидания, перекладывает в очередь ожидания и взятием из очереди на исполнение следующей задачи На этом всё, надеюсь уточнения кто-то дочитает, а не в в воздух это...
@danilakim5126
Жыл бұрын
Немного сложновато, хотелось бы увидеть это ПРЯМ НА РЕАЛЬНОМ ПРИМЕРЕ! Прям наглядно увидеть многопоточность, сам ПОТОК/ПРОЦЕСС. Вот есть компьютер, и что мне делать чтобы увидеть этот поток, процесс?! Запустить программу что-ли? (Понятное дело что и сама ос что-то да выполняет, но как увидеть ожидание процесса, как увидеть что работает многопоточность НА РЕАЛЬНОМ ПРИМЕРЕ?!) МОЖЕТ МОЖНО ПРОГРАММУ НАПИСАТЬ И НАГЛЯДНО УВИДЕТЬ?!? Подскажите пожалуйста, буду благодарен!
@Emagnarium
Жыл бұрын
@@danilakim5126 простейший варик: запускаете live-образ линукс-based (проще говоря убунты), ставите там htop, запускаете его. Там можно наглядно увидеть нити (posix-based threads, по-нашему потоки) и их родительские процессы. Можно изучить и препарировать их, если будет желание. Ещё вариант тот же Process Explorer вместо классического Task Manager виндового способен показать потоки виндовых процессов (не моя специфика, не знаю на сколько глубоко там можно копать) А так, на хабре том же найти реально)
@captainkryuk1899
10 ай бұрын
Братан ты бы вышел на улицу воздухом подышал, пивка попил
Спасибо за видео! Важная тема, давно жду ее)
Продолжай в тоже духе! Хороших лекторов не так уж много!
@t0digital
3 жыл бұрын
Спасибо!
@zavserj
Жыл бұрын
kzread.infoHpwZpcfOxto?feature=share
@SueBeatMaker
10 ай бұрын
@@t0digital Поддерживаю
Сделаю паузу и скажу. Когда увлекался своим ZX-Spectrum-ом, изучал ассемблер. Благодаря этому, не плохо понимаю тему прерываний, т.к. там это было оооочень хорошо видно. Изначально, на zx работает только одна прога. По учебнику, делал на машинных кодах часы, которые работали в фоне в системе. Для это создаётся прерывание, у которого есть свой номер, как сейчас сказали бы, свой ID. Когда сделал эти часы, которые висят и не пропадают, был в восторге)
@quasar-lv6pp
3 жыл бұрын
А по какому учебнику учился? Интересно, т.к. сам на спектруме ассемблер познавал в 90-х
@vryaboshapko
3 жыл бұрын
У меня было наоборот: понимание устройства event loop помогло разобраться с прерываниями на ардуино)))
@Enerdzizer
3 жыл бұрын
Господа,а можно поподробнее про прерывания? Прерывание разве можно создавать? Прерывания в zx spectrum это аналог программы или это всё таки ближе к callback функции?
@RuchejAlex
3 жыл бұрын
@@Enerdzizer в спектруме, прерывание задаётся в каком-то регистре и вроде указывается адрес перехода. Уже не помню
Благодарю за ваш труд!
Как же приятно тебя слушать! Спасибо и удачи в развитии!
Здорово. Отличный ввод в многопоточность и асинхронность. Спасибо.
@t0digital
3 жыл бұрын
Рад, что полезно!
Ждём следующее видео! Тема очень интересная, интересно услышать твои мысли!
@t0digital
3 жыл бұрын
Спасибо!
Ты очень круто всё объясняешь! Очень нравится структура твоих видео! Нет никакой воды из разряда «что бы установить пакет, используйте пип инсталл…» но в тоже время нет «эээ ну тут просто переписываете ядро». Всё очень понятно, доступная информация
Наверное самое лучшее видео по этой теме на ютубе! Все четко и понятно!
@t0digital
9 ай бұрын
Спасибооо!
Спасибо! Ждем больше примеров на практике
Алексей! Спасибо за ваши видео! Почаще бы.
Супер! Как раз по чуть чуть нахватал и так удачно залетел на это видео! Спокойно четко понятно. Спасибо.
Спасибо за разъяснение такой интересной, непростой, но важной темы.
Круто! Все очень доступно и понятно изложено! Спасибо!
Спасибо! Вы отлично объясняете! Ценный материал!
Спасибо за подробное и понятное описание!
Все очень круто, отличный формат и подача! Спасибо, большое!
@t0digital
Жыл бұрын
Спасибооо!
Просто лучшее объяснение из всех, что я смотрел, все четко и структурированно. Спасибо огромное!
Супер, самая не скучная лекция :)
Интересные все видео. Спасибо. Много полезного, без понтов, доступно и профессионально.
@t0digital
3 жыл бұрын
Спасибо! Рад, что полезно
Пересмотрел кучу лекций и подкастов про многопроцессность, многопоточность и асинхронность. Но все было очень сложно и заурядно. Здесь просто и понятно. Спасибо огромное за видео, у тебя талант объяснять!
@t0digital
3 жыл бұрын
Спасибо большое, очень приятно! Буду продолжать
Без лишней воды. Спасибо огромное за такие ценные рассуждения.
Спасибо.. Внятно, понятно и без воды.. Талант педагога налицо!
@t0digital
3 жыл бұрын
Спасибооо!
Спасибо за информацию. Легко и интересно слушать. То что искал!
Всё предельно ясно и по полочкам, спасибо большое!
@t0digital
3 жыл бұрын
Рад, что полезно! Спасибо!
Спасибо за интересное видео!
Алексей, всегда приятно тебя слушать.
@t0digital
3 жыл бұрын
Спасибо!
Очень интересно рассказываете! Просмотрел с интересом до конца. Хотелось бы практических-современных примеров!
Спасибо огромное за Ваши труды. Очень интересно и понятно)
@t0digital
3 жыл бұрын
Спасибооо!
Отличное видео! Очень понятно и четко! Благодарю
Спасибо за каждое видео, очень приятно слушать и смотреть! И темы всегда прям то, что надо!
@zavserj
Жыл бұрын
kzread.infoHpwZpcfOxto?feature=share
@zavserj
Жыл бұрын
kzread.infoHpwZpcfOxto?feature=share
Спасибо большое за ваши поучительные материалы
Спасибо за видео! Очень интересно и хочется побольше примеров и практики))
@t0digital
3 жыл бұрын
Да, в следующих видео будут примеры и практика
Когда набираю в поиске какую-то тему, и в ленте вижу твоë видео об этом - для меня это как явная подсветка - "Здесь точно будет качественное разъяснение." И так и получается.
@t0digital
Жыл бұрын
Спасибооо!
Спасибо за хороший материал, очень доступно для начинающих!
Максимально понятным и доступным языком рассказаны довольно сложные вещи для понимания. Большое уважение автору! Но про синхронность надо конечно поразвернутей рассказать в следующем видео, особенно азы и механику событий.
Отличное видео. Спасибо!
спасибо большое за простое но в то же время содержательное видео!
Спасибо за ваш контент!
Супер! Очень интересно и доходчиво
Спасибо за классное изложение материала!
Без лишней воды. Спасибо огромное за инфо.
Спасибо! Очень доходчивое объяснение)
На одном дыхании посмотрел) Очень классно, продолжай)
@t0digital
3 жыл бұрын
Спасибо! На бусти уже есть продолжение, скоро появится и на канале
Благодаря таким авторам, хочется изучать тему. Спасибо! Смотрим дальше
отличная лекция! впрочем как и всегда. спасибо за твои труды и доступное изложение сложных тем.
@t0digital
3 жыл бұрын
Спасибо, рад, что полезно!
Большое спасибо за доступное объяснение таких важных вещей!
@t0digital
3 жыл бұрын
Спасибо, рад, что понравилось!
спасибо за видео. хотелось бы еще области применения тех или иных подходов услышать
Доходчивое объяснение. Интересно слушать. Благодарю 🌈
Очень интересный материал, хотелось бы больше услышать про то, как происходит работа процессора на физическом уровне!
Спасибо за понятное изложение темы
Тема действительно интересная и важная. Я лично с ней столкнулся, когда нужно было обрабатывать запрос на вызов предсказательной модели (что не быстро). Надеюсь услышать в следующем видео какие-либо лучшие практики на этот счёт!
Большое тебе спасибо! Очень круто, а главное своевременно. Там в Джанго 3.1 подвезли асинхорнные вьюшки, хотел поиграться с ними, а тут и объяснения подъехали. Моё уважение!
@t0digital
3 жыл бұрын
Спасибо!
Спасибо , надеюсь разберусь в теме асинхронности с нуля до полного понимания благодаря вашим роликам. Перехожу к следующему )
Большое спасибо за твою работу! Очень полезная информация.
@t0digital
2 жыл бұрын
Спасибо! Рад, что полезно!
Отличное видео! Жду продолжения =)
@t0digital
3 жыл бұрын
Скоро будет:)
Большое спасибо за ролик!
Каждый раз слушаю с большим интересом) спасибо)
@t0digital
3 жыл бұрын
Спасибооо!
Благодарю за то, что вы делаете!!!!
@t0digital
3 жыл бұрын
Спасибо! Будем продолжать
Очень интересно рассказываете)
Спасибо большое, ждём продолжения
@t0digital
3 жыл бұрын
спасибо, скоро продолжение, на бусти уже кое-что есть:)
Алексей, спасибо, смотрю все твои видео подряд, старые еще надо закончить смотреть. ) Невероятно полезно, особенно Джуну. ) Продолжай дальше!
@t0digital
3 жыл бұрын
Будем продолжать!
Спасибо! Очень чёткое объяснение.
Благодарю, Вас, за труд!
Спасибо за видеоурок. Очень интересно посмотреть разбор темы с кодом
Очень круто! Выпускай почаще видео с ликбезом. Очень люблю за завтраком включить и послушать сжато полезную инфу.
Понятно и познавательно. Спасибо за полезную информацию!
@t0digital
3 жыл бұрын
Рад, что полезно!
Не ожидал, от канал с таким количеством подписчиков, такого качества видео, продолжайте в том же духе!
@t0digital
3 жыл бұрын
Спасибо! Подписчики тоже понемногу растут, что приятно🙏
Классно рассказываешь, приятная атмосфера
@t0digital
10 ай бұрын
Спасибо!
Классная подача материала!
@t0digital
3 жыл бұрын
Спасибооо💪
Самое чёткое и ясное введение в тему какое только встречал!
Четкое видео, очень доступно объяснил, лайк и подписка
Отличный канал, благодарю
Классное видео. Ждём практики.
@t0digital
3 жыл бұрын
Немного практики есть в следующем видео на канале, оно уже есть. А разбираться будем в следующих :)
Супер разложил! На пальцах) благодарю за труды😊
Спасибо. Круто объясняешь!
поразительно качественный контент! спасибо!
@t0digital
3 жыл бұрын
Спасибооо! Приятно:)
Спасибо за видео!
спасибо за труд! все понятно и доступно
@t0digital
3 жыл бұрын
Рад, что полезно! Спасибо!
Очень познавательно. Очень жду продолжения. Хотелось бы по этой же теме посмотреть взаимодействия оперативной памяти к ядрам и кешу.
Год назад смотрел видео))) Сейчас пересматриваю, и понимаю значительно больше уже) Короче, я на этих видео понял суть программирования! Спасибо большое, это значительно упростило мне жизнь!)))
Объяснил сложные вещи доступным языком! Спасибо!
@t0digital
2 жыл бұрын
Спасибо!
Отлично! Благодарю!
Спасибо! Очень полезно!
Спасибо огромное за это видео, все четко объяснил ))
Клевое видео для погружения в тему!
Алекс! Это было самое понятное объяснение на тему GIL и async которое я видел :) Продолжай снимать!
@t0digital
3 жыл бұрын
Спасибо:)!
Добрый день, видео интересное и познавательное и вызывает ещё больше вопросов😁. Буду ждать следуещее видео)
@t0digital
3 жыл бұрын
Спасибо!
Спасибо большое, теперь наконец-то стало понятно! )
Хорошо рассказал, спасибо!
@t0digital
3 жыл бұрын
Спасибо, рад, что понравилось!
Очень толковое объяснение !
@t0digital
3 жыл бұрын
Спасибо!
Очень понятно все разложил, спасибо большое, как раз пытаюсь учить питон, Я пока на синтаксисе, но думаю уже с этих пор нужно понимать какие технологии испольовать в коде, чтобы на выходе получить нормальное приложение, с высокой эффективностью,однозначно, лайк
Комментарий ради большего раскрытия асинхронности
@t0digital
3 жыл бұрын
Спасибо :)!
Круто, спасибо большое!)))
Спасибо, отличное видео, многое для себя понял)
Ну наконец то нашел нормальное объяснение, спасибо Вам огромное!!
Ждём продолжения!)
@t0digital
3 жыл бұрын
Спасибо! Скоро будет продолжение