Параллельное программирование на Python
Вставка
- Опубліковано 27 вер 2024
- Курс из 15 занятий, читается весной 2021 года в МФТИ, школа ЛФИ, 2 курс.
Тема 3-го занятия: Параллельное программирование на Python.
Материалы курса: github.com/tkh...
Telegram-канал для общения вольнослушателей: t.me/tkhiriano...
Спонсировать канал: / tkhirianov или www.paypal.me/...
Вместо спонсорства мне предлагаю помочь Тимофею 7 лет из Набережных Челнов восстановить ухо: bolshie-dela.c...
Тайм-коды: многопоточность, асинхронность, Thread, Очередь/Queue, GIL
0:00 Однопоточность. Последовательное программирование, где 1 исполнитель
4:26 чередование (interleaving). Планировщик задач
13:02 смысл чередования
14:14 ядро. Работа с отложенными задачами, не зависает
22:10 несколько ядер
23:50 цели параллельного программирования:
24:51 1) интерактивность, 2) скорость вычисления
27:20 CPU Генератор частоты
32:10 2 способа увеличить скорость вычислений: 1) много ядер или процессоров. Система с общей памятью
37:17 2) много вычислительных систем (распределённая). Система с разделённой памятью. Бывают: - гомогенные (кластер/фабрика) - гетерогенные (вычислительная сеть, по network)
41:01 Параллельность
43:14 схемы взаимодействия процессов:
44:08 1) shared memory (общая память)
47:18 (-) критическая секция программного кода (двойное вычисление) heisenbug (гейзенбаг) плавающая ошибка
52:15 как решить: Блокировки. Нужна ОС. Mutual exclusion (взаимные исключения) mutex
57:52 разная организация общей памяти
58:35 Queue Очереди
58:58 Pipe очередь символьная. Низкоуровневые сокеты
1:00:55 параллельный алгоритм затратен и требует сложной отладки (в возможных багах)
1:02:04 отладка параллельных систем. В очередях берет на себя - библиотека ЯП
1:09:02 2) другой, проще способ - взаимодействие процессов: main thread. Нити Исполнения
1:12:42 получение результата из треда - join() присоединение нити
1:15:05 у каждой нити свой стэк. Синхронный и асинхронный вызов
1:16:14 взаимодействие между нитями автоматически происходит через shared memory, мы можем и там организовать очередь для взаимодействия без блокировок. Библиотека очередь queue
1:17:53 GIL (Global Interpreter Lock) в Питоне. Глобальная блокировка интерпретатора. Утечка памяти (memory leak)
1:26:55 (+) интерактивность
1:28:51 Практика. Презентация Многопоточность в Python: 1) Поток и процесс, 2) Передача данных между потоками при помощи pipe и общей памяти, 3) GIL, 4) Асинхронное выполнение потоков, 5) Библиотеки threading, multiprocessing, asyncio
1:29:00 Питон - язык не для параллельного программирования. Но в стандартной библиотеке есть:
1:29:40 1) низкоуровневые нити _thread - Low-level threading API 2) высокоуровневый threading
1:30:54 Код. Создание нитей (потоков) и процессов
1:34:34 получение результата с нити. Запуск потока с применением threading
1:35:30 (+) отдельная возможность - запускать и отдельно - передавать параметры
1:36:34 Глобальные переменные - это великое зло для параллельного программирования. Это скрытая критическая секция
1:42:28 передача данных между потоками при помощи pipe и общей памяти Queue
1:43:11 есть очереди, предназначенные для взаимодействия уже самих вычислительных процессов. А есть - для нитей
1:43:27 библиотека queue для threaded programming (передача информации между нитями)
1:44:16 очередь для разных вычислительных процессов multiprocessing.Queue
1:44:20 когда разные вычислительные процессы у нас работает одновременно несколько интерпретаторов Python. (+) производительность
1:45:00 Код. put и get (давать и брать) в/из очереди
1:47:25 Pipe - структура данных для связи между процессами в multiprocessing
1:53:33 Менеджер - класс многопроцессорных модулей, обеспечивающий общую информацию
1:55:30 Заключение. Ограниченный ресурс параллельности. Возможность параллелизации. Зависимость от данных. Начать вычисление может только 1 актор. При максимальной эффективности
Скачать конспект: www.patreon.com/iritaka
Спасибо Вам
@@Всепровсе-б2хт
тттТ
Л
Гениальный преподаватель. С горящими глазами, юмором, уместными метафорами! Нет слов, браво!
10 выпавших блоков питания из 10
Как всегда - превосходен 👏 Особенно, хотелось отметить особый талант лектора
Крутой канал, мужику респектище, знает своё дело
Тимофей Федорович, большое спасибо за ваши лекции, очень интересно и очень полезно
но не особо точно :)
Вот это я понимаю любовь к своему делу, прекасно)) Спасибо Вам Тимофей))
Лучший преподаватель в мире.
Шикарное объяснение, спасибо вам
Respect. Timofey Xiryanov You are the best. Thanks!!!
Просто замечательная подача информации. Ждем продолжения, тема очень интересная
Спасибо Тимофей, всегда с большим удоволствием смoтрю ваши лекции!
как быстро время летит, попал на ваше видео 2017 года, а вы все также молоды👍🏿
Добрый день. Благодарю вас за прекрасные лекции. Для комфортного просмотра отключайте, пожалуйста, уведомления - они сильно отвлекают)
Захожу в лекции Хирьянова после чтения документации, чтобы вспомнить ощущение, когда всё понимаешь.
Пишет "параллельное программирование" не отвлекаясь на свои слова. Это реальный пример такого программирования.
Великолепная подача информации. Мое вам почтение.
Большое человеческое спасибо.
Тимофей Федорович, респект и уважуха, очень вдохновляете, я подсел на ваши лекции)
Супер! очень полезно. Скорее бы след. лекция.
преподаватель от Бога! Спасибо!
Спасибо за лекцию - очень интересно, информативно и полезно!
Вспомнил момент восхищения от новости про выход Pentium D - ДВУХЯДЕРНЫЙ!!!! ЭТО КАК ДВА ПРОЦЕССОРА НО В ОДНОМ!!!
Статью прочитал тогда в игромании или стране игр, точно не помню журнал.
лекция про потоки весьма своевременна. читаю лутца и прохожу как раз потоки
Прекрасный рассказчик и отличный материал!
Люблю питончик!!!
Рекомендую курс и преподаватель отличный. Коммент вместо второго лайка.
Барабанщику не сложно, он вёслами не крутит 😂
Нет, а если серьезно , то спасибо вам большое))
Очень интересно слушать
Хорошему не сложно))) А плохому -- когда как)) Особенно, если после концерта бьют в гримёрке ;D
++++++++++ Хороший Учитель! Респект однозначно!
Вижу, что Тимофей под конец лекции устал. Красавчик
буквально недавно задавался этим вопросом многопоточности, пришел к выводу, что не совсем блокировка нужна а реорганизация процесса, Первое это присвоение статусов для объектов с которыми работает поток(процесс) на такие как: свободен, занять процессом, обработан процессом(завершен) и еще возможно какие то дополнительные статусы. Что бы не возникало ситуации доступа нескольких процессов одновременно к одному свободному объекту и путаницы какой процесс раньше его возьмет(как в вашем примере с туалетом), какой позже и т д, организуется очередь. Сначала любой свободный или освободившийся поток попадает в очередь и ждет, пока предыдущий поток не станет занят. схема Fifo lifo. Возможно оно так организовано и я не владею всей полной информации о распределении потоков, но вижу правильной работу распределения такой.
Топовый лектор!
Спасибо!
Мне понадобилось какое-то время чтобы осознать, что "общая память" не только общая в плане физического расположения относительно акторов, но и всмысле общего доступа к одним переменным (или адресам).
Вводная общая часть прекрасна, практическая часть на питоне несколько сумбурна и непроработана.
Круто! А почему следующая лекция скрыта?
Поправил. Проверяйте.
Тимофей Фёдорович, вы лучший, спасибо!
Interleaving. Каждые 50 минут звенит звонок начала урока. Ученик (процессор) открывает портфель, достаёт соответствующую очередному предмету тетрадку, может быть ещё что-то (линейку, циркуль) и приступает к этому уроку. И выполняет этот урок до звонка окончания урока. Затем он убирает эту тетрадь и другое в портфель.По очередному звонку начала очередного урока ученик достаёт тетрадь другого предмета согласно расписанию и т.д
С тем, что в микроконтроллере нет операционной системы, категорически не согласен. Каких только ОС нет под них. Ну, самая популярная, конечно FreeRTOS. Но в последнее время появились камни достаточно мощные (даже с несколькими ядрами), чтобы тянуть даже линуксы -- урезанные, конечно, вроде бизибокса.
Более того! Параллельная многозадачность в МК существует всегда, вне зависимости от того, используем мы ОС или нет. Там же есть прерывания от периферии, которые могут вклиниваться в основной процесс в случайные моменты. А, например, МК Propeller вообще восьмиядерный, и там вообще всё выполняется истинно параллельно.
Thanks :)
1:42:14 функция is_prime не определена
Видимо какой то блок выше не отработал или так и было задумано.
Спасибо Вам
30:05 процессор к радиатору "прикипел"
Тимофей Федорович, спасибо за простое разъяснение. Не могли бы Вы кратко коснуться особенностей распараллеливания на CUDA и посоветовать какой-либо популярно-практический материал по этой теме. Спасибо.
Алексей, к сожалению, не работал пока на видеокартах. Как только поработаю в этой теме и разберусь, постараюсь сделать курс или хотя бы пару лекций.
@@tkhirianov Огромное спасибо! С нетерпением буду ждать.
Тайм-код 8:20
Правильнее доля вычисляется так: dt/(dt+∆t)
1:51:30 - Сразу после запуска процесса p, у вас parent_conn начинает принимать соединения и в этот же момент другой процесс p отправляет туда массив. Так что всё логично. Это же два разных процесса
Именно поэтому и должен быть вывод другой)
Огромное спасибо за интересные и полезные лекции! Жаль правда, что ссылка на гитхаб с файлами в описании не активная((
@@Throttle0496 оо, спасибо! твоя ссылка работает
Тимофей, подскажите, пожалуйста, в МФТИ есть программы обучения для тестировщиков ?
Магнитов, кажется, все больше и больше. К концу курса они заполнят всю доску?:)
Добрый день!
Не по теме видео вопрос, но всё же: сейчас приняли (или принимают) закон о просветительской деятельности. Как сильно это Вас коснется? Стоит ли уже запасливо копировать Ваши видео себе на винт (а то я недавно начал Вас смотреть и изучать Python) или рано мне панику разводить?
Здесь точно проблем не будет, т.к. эти лекции изначально для конкретных учебных заведений. Там в законе это отдельно прописано.
Прерывание выставляет флаг в стеке процессора, и планировщик - watchdog при проверке пробуждает процессор для выполнения hook-а - входа полученных данных от прерывания в ожидающую программу.
👏👍
не знаю что я здесь делаю, но очень интересно
В начале видео всё очень было похоже на асинхронность в Python)
отличный ролик, но хотелось бы больше материалов по c++
кому чего, я вот конкретно этот урок ждал)
День добрый. А остальные 10 занятий будут выставляться? Как их можно увидеть?
39:59 bus?
30:07 Это как так проц к радиатору прилепился?))) это спец экспонат, или он там вообще в сокете без держателя?)
Ну, вообще сокет можно разобрать, для некоторых китайских процессоров надо так делать
Когда кто-то пытается объяснить как работать с параллельным программированием 1:47:28
В питоне нет многопоточности - есть только полупоточность.
(Шутка намекающая на проблему с GIL)
Здравствуйте Тимофей. Студенты в МФТИ пишут курсовую, дипломную(по программированию), попадались или рассматривает ли МФТИ работы студентов с коммерческой точки зрения? Дипломная работа, проект который соберут трое студентов, может содержать интересные решения в различных сферах... Тему Искусственный интеллект привлекает Наше правительство в МФТИ?
Может ли привлечь?
pymentor
ТФ, извините, конечно, но иногда видно непонимание каких-то базовых моментов с вашей стороны.
Не стоит смешивать асинхронное выполнение и выполнение на потоках, не рассказав про EventLoop, про разницу I/O-bound и CPU-bound задач. Разумеется, потоки и асинхронность предполагают выигрыш в случае I/O-bound задач, когда процессы решают CPU-bound, но реализованы они по-разному со всеми вытекающими.
В случае асинхронного выполнения, в частности, data race condition быть не может, поскольку это не параллельное выполнение, а конкурентное (concurrency), т.е. всё выполняется в одном потоке внутри одного процесса. Тем не менее в asyncio есть Lock, Semaphore, Condition, BoundedSemaphore, Event, Queue и ряд других примитивов синхронизации, но их цель несколько другая.
Также рекомендую ознакомиться с понятием воркера, которое есть как на потоках, процессах, так и в асинхронности. Этот способ существенно облегчает и делает более безопасным выполнение корутин (это про асинхронность).
Рекомендую: «Архитектура компьютера» Танебаума, «Async Techniques and Examples in Python» Майкла Кеннеди (см. nnmclub, ну или я могу скинуть вам эти материалы), видео с канала Corey Schafer, лекции Юрия Селиванова (Python core developer, asyncio maintainer), Андрея Светлова (aiohttp maintainer), материалы по асинхронности в других языках, где она реализована лучше, нежели в Python: go с его goroutine и каналами, например, или js с его Promise'ами.
И, возможно, Алексей Голобурдин с канала Диджитализируй в скором времени начнёт свой курс «WEB разработка на Python», где расскажет в том числе про асинхронный Python.
читать тут все умеют.
Race condition безусловно может возникнуть и при одном процессоре, и нескольких потоках, то есть при concurrent выполнении:
; 1 поток
mov addr, %rax
; Произошло переключение потоков
; 2 поток
mov addr, %rax
inc %rax
mov %rax, addr
; Снова переключение потоков
;1 поток
inc %rax
mov %rax, addr
Такая ситуация вполне может случиться при выполнении "конкурентно" чего то в духе
x += 1
А когда поток один - это вообще не concurrency
@@georgiipetrovich5407 нет, ознакомьтесь с темой
@@bluxer4225 вы этим сообщением доказали, что умеете писать? Или зачем эта никому не нужная, пустая писня от профана?
И давно киркоров преподаёт?
Что такое параллельное программирование? АЛУ не может работать параллельно в силу своей физики.
Тогда параллельное программирование это исполнение одной программы несколькими процессорами одновременно. Выигрыш в скорости. На такое параллельное программирование я согласен.
То что он описывает это не параллельное а периодическое исполнение разных программ. Время исполнения команд тоже самое. Но теряется время на переходы.
В чём смысл?
допустим нужно отрисовывать графику игры и одновременно организовать управления через клавиатуру , тут без таких пирирываний никак
Щщ
виндовозеры хехе
Я вот считаю, что вы тратите моё время пока пишете на доске, монтажем можно было воспользоваться
Слабая лекция, важные практические моменты не рассмотрены вообще
Знаю я одного "раба на галерах" - войну устроил.
гля. киркоров уже питон преподает)))
Вы - крутой! Гульфик Фюрер - сидеть! Не надо переплетать себя с политикой, Вы же мастер своего дела, а не политик...
*Ты же знаешь сколько преподаватели получают, ты что голодного хочешь убедить, что он сытый? Имеет полное право и не ссыт.*
кто тут еще с курса на степике по многопоточному программированию на python?
Ваши лекции прекрасны!
Спасибо Вам большое. Жаль у нас школе так не умеют преподавать материал
Как всегда лайк. Не хватает примеров, которые вы на ходу демонстрировали на прошлых видео. Например, как с черепахой и объяснением , что происходит в конкретном месте.
Этого очень не хватает , когда высоздаете классы наследующие из базовых классов
Процессоры тоже загружены на 146% 😅😂🤣
Если кто помнит, не так давно были нередки вредоносы под винду, которые, когда запускались, жрали 100% процессора. Многие думали, что они какие-то мегавычисления там выполняют на проце, а на самом деле, там крутился пустой цикл в потоке, который ожидал подключения по сети. Видимо, оптимизация переключения процессов как-то так устроена, что если никакой серьёзной работы процесс не выполняет, то, типа, подождём -- недолго же, а он всё продолжает и продолжает скакать с команды на команду. Т.е. эти самые вредоносы писались какими-то очень криворукими людьми, которые либо не замечали такого палевного бага, либо не знали, как починить. А там всего-то и нужно, что чем-нибудь занять проц или уйти в сон на миллисекунду, напрмер, проверив отсутствие соединения.
Это лучшее объяснение фунтамента параллелизма, что я видел. must-see
1:27:57 - Новая тема курса от Тимофея Федоровича))
Спасибо за то, что делаете!!!
No entiendo un carajo