Параллельное программирование на Python
Курс из 15 занятий, читается весной 2021 года в МФТИ, школа ЛФИ, 2 курс.
Тема 3-го занятия: Параллельное программирование на Python.
Материалы курса: github.com/tkhirianov/pydatan
Telegram-канал для общения вольнослушателей: t.me/tkhirianov_data_analysis...
Спонсировать канал: / tkhirianov или www.paypal.me/tkhirianov
Вместо спонсорства мне предлагаю помочь Тимофею 7 лет из Набережных Челнов восстановить ухо: bolshie-dela.com/podarite-voz...
Пікірлер: 123
Тайм-коды: многопоточность, асинхронность, 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
@user-hu7tu5qe7b
3 жыл бұрын
Спасибо Вам
@user-nh7ic5ie3q
8 ай бұрын
@@user-hu7tu5qe7bт
@user-nh7ic5ie3q
8 ай бұрын
тттТ
@user-nh7ic5ie3q
8 ай бұрын
Л
Пишет "параллельное программирование" не отвлекаясь на свои слова. Это реальный пример такого программирования.
Гениальный преподаватель. С горящими глазами, юмором, уместными метафорами! Нет слов, браво!
10 выпавших блоков питания из 10
Тимофей Федорович, большое спасибо за ваши лекции, очень интересно и очень полезно
@dmitriyvaulin
2 жыл бұрын
но не особо точно :)
Крутой канал, мужику респектище, знает своё дело
как быстро время летит, попал на ваше видео 2017 года, а вы все также молоды👍🏿
Просто замечательная подача информации. Ждем продолжения, тема очень интересная
Спасибо Тимофей, всегда с большим удоволствием смoтрю ваши лекции!
Ваши лекции прекрасны!
Шикарное объяснение, спасибо вам
Как всегда - превосходен 👏 Особенно, хотелось отметить особый талант лектора
Вот это я понимаю любовь к своему делу, прекасно)) Спасибо Вам Тимофей))
Великолепная подача информации. Мое вам почтение.
Лучший преподаватель в мире.
Добрый день. Благодарю вас за прекрасные лекции. Для комфортного просмотра отключайте, пожалуйста, уведомления - они сильно отвлекают)
Супер! очень полезно. Скорее бы след. лекция.
Спасибо за лекцию - очень интересно, информативно и полезно!
Respect. Timofey Xiryanov You are the best. Thanks!!!
Это лучшее объяснение фунтамента параллелизма, что я видел. must-see
Тимофей Федорович, респект и уважуха, очень вдохновляете, я подсел на ваши лекции)
Большое человеческое спасибо.
1:27:57 - Новая тема курса от Тимофея Федоровича)) Спасибо за то, что делаете!!!
Вспомнил момент восхищения от новости про выход Pentium D - ДВУХЯДЕРНЫЙ!!!! ЭТО КАК ДВА ПРОЦЕССОРА НО В ОДНОМ!!! Статью прочитал тогда в игромании или стране игр, точно не помню журнал.
преподаватель от Бога! Спасибо!
Прекрасный рассказчик и отличный материал!
лекция про потоки весьма своевременна. читаю лутца и прохожу как раз потоки
Вижу, что Тимофей под конец лекции устал. Красавчик
Гонка в повышении термопакета улыбнула :)
Как всегда лайк. Не хватает примеров, которые вы на ходу демонстрировали на прошлых видео. Например, как с черепахой и объяснением , что происходит в конкретном месте. Этого очень не хватает , когда высоздаете классы наследующие из базовых классов
Спасибо Вам большое. Жаль у нас школе так не умеют преподавать материал
++++++++++ Хороший Учитель! Респект однозначно!
Рекомендую курс и преподаватель отличный. Коммент вместо второго лайка.
Люблю питончик!!!
Тимофей, подскажите, пожалуйста, в МФТИ есть программы обучения для тестировщиков ?
Круто! А почему следующая лекция скрыта?
@tkhirianov
3 жыл бұрын
Поправил. Проверяйте.
@sekejodemini1
3 жыл бұрын
Тимофей Фёдорович, вы лучший, спасибо!
Спасибо!
Спасибо Вам
Барабанщику не сложно, он вёслами не крутит 😂 Нет, а если серьезно , то спасибо вам большое)) Очень интересно слушать
@Ma_X64
3 жыл бұрын
Хорошему не сложно))) А плохому -- когда как)) Особенно, если после концерта бьют в гримёрке ;D
Топовый лектор!
буквально недавно задавался этим вопросом многопоточности, пришел к выводу, что не совсем блокировка нужна а реорганизация процесса, Первое это присвоение статусов для объектов с которыми работает поток(процесс) на такие как: свободен, занять процессом, обработан процессом(завершен) и еще возможно какие то дополнительные статусы. Что бы не возникало ситуации доступа нескольких процессов одновременно к одному свободному объекту и путаницы какой процесс раньше его возьмет(как в вашем примере с туалетом), какой позже и т д, организуется очередь. Сначала любой свободный или освободившийся поток попадает в очередь и ждет, пока предыдущий поток не станет занят. схема Fifo lifo. Возможно оно так организовано и я не владею всей полной информации о распределении потоков, но вижу правильной работу распределения такой.
Мне понадобилось какое-то время чтобы осознать, что "общая память" не только общая в плане физического расположения относительно акторов, но и всмысле общего доступа к одним переменным (или адресам).
Огромное спасибо за интересные и полезные лекции! Жаль правда, что ссылка на гитхаб с файлами в описании не активная((
@volodymyromelenchuk7528
3 жыл бұрын
@@Throttle0496 оо, спасибо! твоя ссылка работает
Thanks :)
1:42:14 функция is_prime не определена
@user-gq6dv9pp5h
3 жыл бұрын
Видимо какой то блок выше не отработал или так и было задумано.
кто тут еще с курса на степике по многопоточному программированию на python?
Магнитов, кажется, все больше и больше. К концу курса они заполнят всю доску?:)
Добрый день! Не по теме видео вопрос, но всё же: сейчас приняли (или принимают) закон о просветительской деятельности. Как сильно это Вас коснется? Стоит ли уже запасливо копировать Ваши видео себе на винт (а то я недавно начал Вас смотреть и изучать Python) или рано мне панику разводить?
@Ma_X64
3 жыл бұрын
Здесь точно проблем не будет, т.к. эти лекции изначально для конкретных учебных заведений. Там в законе это отдельно прописано.
Вводная общая часть прекрасна, практическая часть на питоне несколько сумбурна и непроработана.
30:07 Это как так проц к радиатору прилепился?))) это спец экспонат, или он там вообще в сокете без держателя?)
@Ginto_O
3 жыл бұрын
Ну, вообще сокет можно разобрать, для некоторых китайских процессоров надо так делать
Тимофей Федорович, спасибо за простое разъяснение. Не могли бы Вы кратко коснуться особенностей распараллеливания на CUDA и посоветовать какой-либо популярно-практический материал по этой теме. Спасибо.
@tkhirianov
3 жыл бұрын
Алексей, к сожалению, не работал пока на видеокартах. Как только поработаю в этой теме и разберусь, постараюсь сделать курс или хотя бы пару лекций.
@alexeyshulgin4556
3 жыл бұрын
@@tkhirianov Огромное спасибо! С нетерпением буду ждать.
С тем, что в микроконтроллере нет операционной системы, категорически не согласен. Каких только ОС нет под них. Ну, самая популярная, конечно FreeRTOS. Но в последнее время появились камни достаточно мощные (даже с несколькими ядрами), чтобы тянуть даже линуксы -- урезанные, конечно, вроде бизибокса. Более того! Параллельная многозадачность в МК существует всегда, вне зависимости от того, используем мы ОС или нет. Там же есть прерывания от периферии, которые могут вклиниваться в основной процесс в случайные моменты. А, например, МК Propeller вообще восьмиядерный, и там вообще всё выполняется истинно параллельно.
Interleaving. Каждые 50 минут звенит звонок начала урока. Ученик (процессор) открывает портфель, достаёт соответствующую очередному предмету тетрадку, может быть ещё что-то (линейку, циркуль) и приступает к этому уроку. И выполняет этот урок до звонка окончания урока. Затем он убирает эту тетрадь и другое в портфель.По очередному звонку начала очередного урока ученик достаёт тетрадь другого предмета согласно расписанию и т.д
30:05 процессор к радиатору "прикипел"
Тайм-код 8:20 Правильнее доля вычисляется так: dt/(dt+∆t)
День добрый. А остальные 10 занятий будут выставляться? Как их можно увидеть?
1:51:30 - Сразу после запуска процесса p, у вас parent_conn начинает принимать соединения и в этот же момент другой процесс p отправляет туда массив. Так что всё логично. Это же два разных процесса
@guiterenzog2723
Жыл бұрын
Именно поэтому и должен быть вывод другой)
👏👍
Если кто помнит, не так давно были нередки вредоносы под винду, которые, когда запускались, жрали 100% процессора. Многие думали, что они какие-то мегавычисления там выполняют на проце, а на самом деле, там крутился пустой цикл в потоке, который ожидал подключения по сети. Видимо, оптимизация переключения процессов как-то так устроена, что если никакой серьёзной работы процесс не выполняет, то, типа, подождём -- недолго же, а он всё продолжает и продолжает скакать с команды на команду. Т.е. эти самые вредоносы писались какими-то очень криворукими людьми, которые либо не замечали такого палевного бага, либо не знали, как починить. А там всего-то и нужно, что чем-нибудь занять проц или уйти в сон на миллисекунду, напрмер, проверив отсутствие соединения.
не знаю что я здесь делаю, но очень интересно
В начале видео всё очень было похоже на асинхронность в Python)
Прерывание выставляет флаг в стеке процессора, и планировщик - watchdog при проверке пробуждает процессор для выполнения hook-а - входа полученных данных от прерывания в ожидающую программу.
39:59 bus?
отличный ролик, но хотелось бы больше материалов по c++
@alexp2179
3 жыл бұрын
кому чего, я вот конкретно этот урок ждал)
Здравствуйте Тимофей. Студенты в МФТИ пишут курсовую, дипломную(по программированию), попадались или рассматривает ли МФТИ работы студентов с коммерческой точки зрения? Дипломная работа, проект который соберут трое студентов, может содержать интересные решения в различных сферах... Тему Искусственный интеллект привлекает Наше правительство в МФТИ?
@idw1n235
3 жыл бұрын
Может ли привлечь?
Процессоры тоже загружены на 146% 😅😂🤣
pymentor
Когда кто-то пытается объяснить как работать с параллельным программированием 1:47:28
В питоне нет многопоточности - есть только полупоточность. (Шутка намекающая на проблему с GIL)
И давно киркоров преподаёт?
ТФ, извините, конечно, но иногда видно непонимание каких-то базовых моментов с вашей стороны. Не стоит смешивать асинхронное выполнение и выполнение на потоках, не рассказав про 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'ами.
@user-zg2bx5cb3d
3 жыл бұрын
И, возможно, Алексей Голобурдин с канала Диджитализируй в скором времени начнёт свой курс «WEB разработка на Python», где расскажет в том числе про асинхронный Python.
@bluxer4225
3 жыл бұрын
читать тут все умеют.
@georgiipetrovich5407
3 жыл бұрын
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
@user-zg2bx5cb3d
3 жыл бұрын
@@georgiipetrovich5407 нет, ознакомьтесь с темой
@user-zg2bx5cb3d
3 жыл бұрын
@@bluxer4225 вы этим сообщением доказали, что умеете писать? Или зачем эта никому не нужная, пустая писня от профана?
Что такое параллельное программирование? АЛУ не может работать параллельно в силу своей физики. Тогда параллельное программирование это исполнение одной программы несколькими процессорами одновременно. Выигрыш в скорости. На такое параллельное программирование я согласен. То что он описывает это не параллельное а периодическое исполнение разных программ. Время исполнения команд тоже самое. Но теряется время на переходы. В чём смысл?
@user-fe5oj9ex9i
Жыл бұрын
допустим нужно отрисовывать графику игры и одновременно организовать управления через клавиатуру , тут без таких пирирываний никак
виндовозеры хехе
Я вот считаю, что вы тратите моё время пока пишете на доске, монтажем можно было воспользоваться
Щщ
Слабая лекция, важные практические моменты не рассмотрены вообще
Знаю я одного "раба на галерах" - войну устроил.
гля. киркоров уже питон преподает)))
Вы - крутой! Гульфик Фюрер - сидеть! Не надо переплетать себя с политикой, Вы же мастер своего дела, а не политик...
@whitebear1903
3 жыл бұрын
*Ты же знаешь сколько преподаватели получают, ты что голодного хочешь убедить, что он сытый? Имеет полное право и не ссыт.*
No entiendo un carajo