Многопроцессность, многопоточность, асинхронность в Python и не только. Что это и как работает?

Поделиться
HTML-код
  • Опубликовано: 6 июн 2024
  • Мой курс «Хардкорная веб-разработка» - 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

  • @t0digital
    @t0digital  5 месяцев назад

    Мой курс «Хардкорная веб-разработка» - course.to.digital
    Вжух!

  • @Emagnarium
    @Emagnarium 3 года назад +41

    Спасибо за ликбез по мультипоточности ядер)
    "Немножко" дополню/скорректирую в режиме зануды:
    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
      @danilakim5126 Год назад +2

      Немного сложновато, хотелось бы увидеть это ПРЯМ НА РЕАЛЬНОМ ПРИМЕРЕ! Прям наглядно увидеть многопоточность, сам ПОТОК/ПРОЦЕСС. Вот есть компьютер, и что мне делать чтобы увидеть этот поток, процесс?! Запустить программу что-ли? (Понятное дело что и сама ос что-то да выполняет, но как увидеть ожидание процесса, как увидеть что работает многопоточность НА РЕАЛЬНОМ ПРИМЕРЕ?!) МОЖЕТ МОЖНО ПРОГРАММУ НАПИСАТЬ И НАГЛЯДНО УВИДЕТЬ?!? Подскажите пожалуйста, буду благодарен!

    • @Emagnarium
      @Emagnarium Год назад +1

      ​@@danilakim5126 простейший варик: запускаете live-образ линукс-based (проще говоря убунты), ставите там htop, запускаете его. Там можно наглядно увидеть нити (posix-based threads, по-нашему потоки) и их родительские процессы. Можно изучить и препарировать их, если будет желание.
      Ещё вариант тот же Process Explorer вместо классического Task Manager виндового способен показать потоки виндовых процессов (не моя специфика, не знаю на сколько глубоко там можно копать)
      А так, на хабре том же найти реально)

    • @captainkryuk1899
      @captainkryuk1899 10 месяцев назад +11

      Братан ты бы вышел на улицу воздухом подышал, пивка попил

  • @MrVindor
    @MrVindor 3 года назад +27

    Спасибо за видео! Важная тема, давно жду ее)

  • @79fz270704
    @79fz270704 3 года назад +125

    Тема интересная, ждем продолжения.

  • @RuchejAlex
    @RuchejAlex 3 года назад +37

    Сделаю паузу и скажу. Когда увлекался своим ZX-Spectrum-ом, изучал ассемблер. Благодаря этому, не плохо понимаю тему прерываний, т.к. там это было оооочень хорошо видно. Изначально, на zx работает только одна прога. По учебнику, делал на машинных кодах часы, которые работали в фоне в системе. Для это создаётся прерывание, у которого есть свой номер, как сейчас сказали бы, свой ID. Когда сделал эти часы, которые висят и не пропадают, был в восторге)

    • @quasar-lv6pp
      @quasar-lv6pp 3 года назад

      А по какому учебнику учился? Интересно, т.к. сам на спектруме ассемблер познавал в 90-х

    • @vryaboshapko
      @vryaboshapko 3 года назад +1

      У меня было наоборот: понимание устройства event loop помогло разобраться с прерываниями на ардуино)))

    • @Enerdzizer
      @Enerdzizer 3 года назад

      Господа,а можно поподробнее про прерывания? Прерывание разве можно создавать? Прерывания в zx spectrum это аналог программы или это всё таки ближе к callback функции?

    • @RuchejAlex
      @RuchejAlex 3 года назад

      @@Enerdzizer в спектруме, прерывание задаётся в каком-то регистре и вроде указывается адрес перехода. Уже не помню

  • @mrMarseleene
    @mrMarseleene 3 года назад

    Как же приятно тебя слушать! Спасибо и удачи в развитии!

  • @user-ik1in6zt4y
    @user-ik1in6zt4y 3 года назад +6

    Благодарю за ваш труд!

  • @myroslavzadoian4549
    @myroslavzadoian4549 3 года назад +3

    Ждём следующее видео! Тема очень интересная, интересно услышать твои мысли!

  • @kostya8877
    @kostya8877 3 года назад

    Просто лучшее объяснение из всех, что я смотрел, все четко и структурированно. Спасибо огромное!

  • @MS-fu3zf
    @MS-fu3zf 3 года назад +8

    Здорово. Отличный ввод в многопоточность и асинхронность. Спасибо.

    • @t0digital
      @t0digital  3 года назад

      Рад, что полезно!

  • @vladimirkirdan
    @vladimirkirdan Год назад

    Ты очень круто всё объясняешь! Очень нравится структура твоих видео! Нет никакой воды из разряда «что бы установить пакет, используйте пип инсталл…» но в тоже время нет «эээ ну тут просто переписываете ядро». Всё очень понятно, доступная информация

  • @toomanof
    @toomanof 3 года назад +149

    Продолжай в тоже духе! Хороших лекторов не так уж много!

    • @t0digital
      @t0digital  3 года назад +15

      Спасибо!

    • @zavserj
      @zavserj Год назад

      ruclips.net/user/shortsHpwZpcfOxto?feature=share

    • @SueBeatMaker
      @SueBeatMaker 10 месяцев назад

      @@t0digital Поддерживаю

  • @Python2061
    @Python2061 3 года назад

    Без лишней воды. Спасибо огромное за такие ценные рассуждения.

  • @ITPROSTA
    @ITPROSTA 9 месяцев назад +1

    Наверное самое лучшее видео по этой теме на ютубе! Все четко и понятно!

    • @t0digital
      @t0digital  9 месяцев назад

      Спасибооо!

  • @FILA2209
    @FILA2209 3 года назад

    Круто! Все очень доступно и понятно изложено! Спасибо!

  • @user-js8ig2en8e
    @user-js8ig2en8e 3 года назад

    Алексей! Спасибо за ваши видео! Почаще бы.

  • @ZHeKKa
    @ZHeKKa 3 года назад +1

    Спасибо за разъяснение такой интересной, непростой, но важной темы.

  • @makaronronron
    @makaronronron 3 года назад

    Очень круто! Выпускай почаще видео с ликбезом. Очень люблю за завтраком включить и послушать сжато полезную инфу.

  • @user-vo6tn6vu1h
    @user-vo6tn6vu1h Год назад

    Без лишней воды. Спасибо огромное за инфо.

  • @russiancat2011
    @russiancat2011 3 года назад +1

    Пересмотрел кучу лекций и подкастов про многопроцессность, многопоточность и асинхронность. Но все было очень сложно и заурядно. Здесь просто и понятно. Спасибо огромное за видео, у тебя талант объяснять!

    • @t0digital
      @t0digital  3 года назад

      Спасибо большое, очень приятно! Буду продолжать

  • @user-ek3gb9sf6y
    @user-ek3gb9sf6y 9 месяцев назад

    Спасибо за подробное и понятное описание!

  • @tonyp4826
    @tonyp4826 Год назад

    Супер!
    Как раз по чуть чуть нахватал и так удачно залетел на это видео!
    Спокойно четко понятно.
    Спасибо.

  • @bagasayn
    @bagasayn 3 года назад +21

    Супер, самая не скучная лекция :)

  • @volfsonic
    @volfsonic 2 года назад

    Благодаря таким авторам, хочется изучать тему. Спасибо! Смотрим дальше

  • @user-sp2uu8xy8z
    @user-sp2uu8xy8z 2 года назад

    Отличное видео. Спасибо!

  • @777777Philipp
    @777777Philipp 2 года назад

    Супер! Очень интересно и доходчиво

  • @webxcryptoit7308
    @webxcryptoit7308 Год назад

    Все очень круто, отличный формат и подача! Спасибо, большое!

  • @sergekozlov9876
    @sergekozlov9876 3 года назад

    Спасибо большое, ждём продолжения

    • @t0digital
      @t0digital  3 года назад

      спасибо, скоро продолжение, на бусти уже кое-что есть:)

  • @user-yr7qn1dt5t
    @user-yr7qn1dt5t 3 года назад

    Спасибо за ваш контент!

  • @user-hf8hb5du5j
    @user-hf8hb5du5j 3 года назад

    Не ожидал, от канал с таким количеством подписчиков, такого качества видео, продолжайте в том же духе!

    • @t0digital
      @t0digital  3 года назад

      Спасибо! Подписчики тоже понемногу растут, что приятно🙏

  • @HeyArtem
    @HeyArtem Год назад

    Спасибо за информацию. Легко и интересно слушать. То что искал!

  • @FillerWorld
    @FillerWorld 3 года назад +1

    Всё предельно ясно и по полочкам, спасибо большое!

    • @t0digital
      @t0digital  3 года назад

      Рад, что полезно! Спасибо!

  • @Konushbai
    @Konushbai 2 месяца назад

    Спасибо! Ждем больше примеров на практике

  • @mgm_smile
    @mgm_smile 3 года назад

    Отличное видео! Жду продолжения =)

    • @t0digital
      @t0digital  3 года назад

      Скоро будет:)

  • @jorupbek
    @jorupbek 3 года назад

    Спасибо огромное за Ваши труды. Очень интересно и понятно)

    • @t0digital
      @t0digital  3 года назад +1

      Спасибооо!

  • @daniilpopkov4176
    @daniilpopkov4176 3 года назад

    Благодарю, Вас, за труд!

  • @constkk3153
    @constkk3153 Год назад

    Спасибо за интересное видео!

  • @user-it3lh7zg4n
    @user-it3lh7zg4n 3 года назад +1

    спасибо большое за простое но в то же время содержательное видео!

  • @yaroslavnovichkov6736
    @yaroslavnovichkov6736 2 года назад

    Большое спасибо за ролик!

  • @RaZeR22L
    @RaZeR22L 3 года назад

    Спасибо за видео!

  • @radiksaiakhfarov4794
    @radiksaiakhfarov4794 3 года назад

    Ждём продолжения!)

    • @t0digital
      @t0digital  3 года назад

      Спасибо! Скоро будет продолжение

  • @user-rg6gi5ve1g
    @user-rg6gi5ve1g 2 года назад +1

    Спасибо , надеюсь разберусь в теме асинхронности с нуля до полного понимания благодаря вашим роликам. Перехожу к следующему )

  • @s_ivanov179
    @s_ivanov179 Год назад

    Очень интересный материал, хотелось бы больше услышать про то, как происходит работа процессора на физическом уровне!

  • @user-cl2cj6jl9u
    @user-cl2cj6jl9u 10 месяцев назад

    Доходчивое объяснение. Интересно слушать. Благодарю 🌈

  • @SemyonKalyakulin
    @SemyonKalyakulin 2 года назад

    Спасибо! Очень доходчивое объяснение)

  • @Flowmastaz
    @Flowmastaz 3 года назад

    Максимально понятным и доступным языком рассказаны довольно сложные вещи для понимания. Большое уважение автору! Но про синхронность надо конечно поразвернутей рассказать в следующем видео, особенно азы и механику событий.

  • @evrmk
    @evrmk 3 года назад

    Лучший! Бооольше годного контента по Python 😱🤓

  • @alexanderthegreat489
    @alexanderthegreat489 3 года назад

    Спасибо за видео! Очень интересно и хочется побольше примеров и практики))

    • @t0digital
      @t0digital  3 года назад +1

      Да, в следующих видео будут примеры и практика

  • @ansor9775
    @ansor9775 3 года назад +2

    Круто получилось - просто и понятно. Ждем подобные разборки. Спасибо )

  • @andreybelyaev5703
    @andreybelyaev5703 3 года назад

    Спасибо.. Внятно, понятно и без воды.. Талант педагога налицо!

  • @user-bi9sd6ly8h
    @user-bi9sd6ly8h Год назад

    Спасибо за классное изложение материала!

  • @Deiffify
    @Deiffify Год назад

    Отличное видео! Очень понятно и четко! Благодарю

  • @vasiliydrogovozov4285
    @vasiliydrogovozov4285 Год назад

    Круто, спасибо большое!)))

  • @dmytroznak8843
    @dmytroznak8843 3 года назад

    Каждый раз слушаю с большим интересом) спасибо)

    • @t0digital
      @t0digital  3 года назад +1

      Спасибооо!

  • @vladyslavstetsenko2655
    @vladyslavstetsenko2655 3 года назад

    Ждём продолжения!

    • @t0digital
      @t0digital  3 года назад

      Скоро будет:)

  • @user-dc9jh3hq9d
    @user-dc9jh3hq9d 3 года назад

    Отлично! Благодарю!

  • @dalerkhalilov9440
    @dalerkhalilov9440 3 года назад +1

    Спасибо! Отличную тему затронули, надеюсь будет продолжение. 🙏

    • @t0digital
      @t0digital  3 года назад

      Будет обязательно!

  • @metanoia-ca
    @metanoia-ca 3 года назад +3

    Спасибо! Очень полезно!

  • @dimilian4719
    @dimilian4719 3 года назад

    Спасибо за каждое видео, очень приятно слушать и смотреть! И темы всегда прям то, что надо!

    • @zavserj
      @zavserj Год назад

      ruclips.net/user/shortsHpwZpcfOxto?feature=share

    • @zavserj
      @zavserj Год назад

      ruclips.net/user/shortsHpwZpcfOxto?feature=share

  • @user-rp5wg1cw1w
    @user-rp5wg1cw1w 3 года назад

    Самое чёткое и ясное введение в тему какое только встречал!

  • @user-uk4zv3hb2u
    @user-uk4zv3hb2u 3 года назад

    Спасибо за понятное изложение темы

  • @frx1692
    @frx1692 2 года назад

    Спасибо большое за ваши поучительные материалы

  • @Dastan1910
    @Dastan1910 2 года назад

    Спасибо большое, теперь наконец-то стало понятно! )

  • @gladiator-5674
    @gladiator-5674 3 года назад +1

    Очень важная тема. Ждем пример реализации на python
    P.S спасибо Вам за ваши обучающие видео. Рассказываете все очень доступным и понятным языком

    • @t0digital
      @t0digital  3 года назад +2

      Спасибо! Да, в следующих видео будет реализация!

  • @user-cn5pd6do9n
    @user-cn5pd6do9n 3 года назад

    Интересно, ждём продолжения

    • @t0digital
      @t0digital  3 года назад

      Спасибо! Продолжение будет

  • @Pumba053
    @Pumba053 3 года назад

    Спасибо за хороший материал, очень доступно для начинающих!

  • @MrDimka12101
    @MrDimka12101 3 года назад +1

    Тема действительно интересная и важная. Я лично с ней столкнулся, когда нужно было обрабатывать запрос на вызов предсказательной модели (что не быстро).
    Надеюсь услышать в следующем видео какие-либо лучшие практики на этот счёт!

  • @user-rc4kq3eb7r
    @user-rc4kq3eb7r 3 года назад

    Спасибо. Круто объясняешь!

  • @VictorPriyma
    @VictorPriyma 3 года назад

    Благодарю за то, что вы делаете!!!!

    • @t0digital
      @t0digital  3 года назад

      Спасибо! Будем продолжать

  • @psychicks3463
    @psychicks3463 Год назад

    Очень интересно рассказываете)

  • @Deiffify
    @Deiffify Год назад

    Супер разложил! На пальцах) благодарю за труды😊

  • @TheRussificator
    @TheRussificator 3 года назад

    Алексей, всегда приятно тебя слушать.

  • @egoruzh
    @egoruzh 3 года назад

    Интересные все видео. Спасибо. Много полезного, без понтов, доступно и профессионально.

    • @t0digital
      @t0digital  3 года назад +1

      Спасибо! Рад, что полезно

  • @fenixdev6406
    @fenixdev6406 2 года назад

    Очень интересно рассказываете! Просмотрел с интересом до конца. Хотелось бы практических-современных примеров!

  • @narekbektashyan
    @narekbektashyan 3 года назад +2

    Супер тема, спасибо!

  • @user-yp8mw9yv1k
    @user-yp8mw9yv1k 2 года назад

    Очень доходчиво!

  • @mikhailpetrov1948
    @mikhailpetrov1948 3 года назад

    Большое спасибо за доступное объяснение таких важных вещей!

    • @t0digital
      @t0digital  3 года назад

      Спасибо, рад, что понравилось!

  • @user-lz3ez3nn4j
    @user-lz3ez3nn4j 3 года назад

    Отличный канал, благодарю

  • @victorgasiul5813
    @victorgasiul5813 3 года назад +1

    Отличный способ подачи, без заумных фраз, но и без ненужного разжевывания простых вещей, жду ещё

    • @t0digital
      @t0digital  3 года назад

      Спасибо, рад, что понравилось!

  • @tanks-blitz-shorts
    @tanks-blitz-shorts 3 года назад

    Спасибо огромное за это видео, все четко объяснил ))

  • @mvxmvl
    @mvxmvl 3 года назад

    На одном дыхании посмотрел)
    Очень классно, продолжай)

    • @t0digital
      @t0digital  3 года назад +1

      Спасибо! На бусти уже есть продолжение, скоро появится и на канале

  • @irinalivra6789
    @irinalivra6789 3 года назад +2

    Очень доступно ^_^ спасибо!

    • @t0digital
      @t0digital  3 года назад +3

      Юхууу, спасибо! 🙏

  • @StoGigovo
    @StoGigovo 3 года назад

    Алексей, спасибо, смотрю все твои видео подряд, старые еще надо закончить смотреть. ) Невероятно полезно, особенно Джуну. ) Продолжай дальше!

    • @t0digital
      @t0digital  3 года назад

      Будем продолжать!

  • @romanigorevich5021
    @romanigorevich5021 3 года назад

    Алекс! Это было самое понятное объяснение на тему GIL и async которое я видел :) Продолжай снимать!

  • @avorion-ru
    @avorion-ru 2 года назад +1

    Ну наконец то нашел нормальное объяснение, спасибо Вам огромное!!

  • @user-so1rr2is7b
    @user-so1rr2is7b 3 года назад

    Классно интересно оч жду следующего видео

  • @lalalf4535
    @lalalf4535 3 года назад

    Спасибо за видеоурок. Очень интересно посмотреть разбор темы с кодом

  • @vovabortnyak721
    @vovabortnyak721 3 года назад +3

    Полезная тема! Для веб-приложений асинхронность важнее многопоточности и в этом надо разбираться. Годно!

  • @dmitrikamenev7677
    @dmitrikamenev7677 Год назад

    Огромное спасибо!!!

  • @zeman8748
    @zeman8748 3 года назад

    Спасибо, реально помог разобраться)

  • @user-fu8jr9if5f
    @user-fu8jr9if5f 2 года назад

    Ждем продолжение

  • @dmplet
    @dmplet 2 года назад

    Большое спасибо за твою работу! Очень полезная информация.

    • @t0digital
      @t0digital  2 года назад

      Спасибо! Рад, что полезно!

  • @sptica
    @sptica Год назад

    Отлично расказано, спасибо!

  • @user-fi9xc6nc1q
    @user-fi9xc6nc1q 3 года назад +2

    Невероятно интересно! Спасибо за то что объясняете все таким простым и понятным языком!!!

    • @t0digital
      @t0digital  3 года назад

      Спасибо! Рад, что нравится:)

    • @zavserj
      @zavserj Год назад

      ruclips.net/user/shortsHpwZpcfOxto?feature=share

  • @alexandershurakoff9506
    @alexandershurakoff9506 2 года назад

    Клевое видео для погружения в тему!

  • @Zhekazhe1
    @Zhekazhe1 3 года назад

    Понятно и познавательно. Спасибо за полезную информацию!

    • @t0digital
      @t0digital  3 года назад

      Рад, что полезно!

  • @user-sl9rx1wz9p
    @user-sl9rx1wz9p 3 года назад

    Спасибо, отличное видео, многое для себя понял)

  • @andyanderson222
    @andyanderson222 2 года назад

    Спасибо! Очень чёткое объяснение.

  • @anatolys9203
    @anatolys9203 3 года назад

    отличная лекция! впрочем как и всегда. спасибо за твои труды и доступное изложение сложных тем.

    • @t0digital
      @t0digital  3 года назад

      Спасибо, рад, что полезно!

  • @vintets
    @vintets 3 года назад

    Классное видео. Ждём практики.

    • @t0digital
      @t0digital  3 года назад

      Немного практики есть в следующем видео на канале, оно уже есть. А разбираться будем в следующих :)