Тайм-коды: многопоточность, асинхронность, 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
Как всегда лайк. Не хватает примеров, которые вы на ходу демонстрировали на прошлых видео. Например, как с черепахой и объяснением , что происходит в конкретном месте. Этого очень не хватает , когда высоздаете классы наследующие из базовых классов
Вспомнил момент восхищения от новости про выход Pentium D - ДВУХЯДЕРНЫЙ!!!! ЭТО КАК ДВА ПРОЦЕССОРА НО В ОДНОМ!!! Статью прочитал тогда в игромании или стране игр, точно не помню журнал.
буквально недавно задавался этим вопросом многопоточности, пришел к выводу, что не совсем блокировка нужна а реорганизация процесса, Первое это присвоение статусов для объектов с которыми работает поток(процесс) на такие как: свободен, занять процессом, обработан процессом(завершен) и еще возможно какие то дополнительные статусы. Что бы не возникало ситуации доступа нескольких процессов одновременно к одному свободному объекту и путаницы какой процесс раньше его возьмет(как в вашем примере с туалетом), какой позже и т д, организуется очередь. Сначала любой свободный или освободившийся поток попадает в очередь и ждет, пока предыдущий поток не станет занят. схема Fifo lifo. Возможно оно так организовано и я не владею всей полной информации о распределении потоков, но вижу правильной работу распределения такой.
Мне понадобилось какое-то время чтобы осознать, что "общая память" не только общая в плане физического расположения относительно акторов, но и всмысле общего доступа к одним переменным (или адресам).
Interleaving. Каждые 50 минут звенит звонок начала урока. Ученик (процессор) открывает портфель, достаёт соответствующую очередному предмету тетрадку, может быть ещё что-то (линейку, циркуль) и приступает к этому уроку. И выполняет этот урок до звонка окончания урока. Затем он убирает эту тетрадь и другое в портфель.По очередному звонку начала очередного урока ученик достаёт тетрадь другого предмета согласно расписанию и т.д
С тем, что в микроконтроллере нет операционной системы, категорически не согласен. Каких только ОС нет под них. Ну, самая популярная, конечно FreeRTOS. Но в последнее время появились камни достаточно мощные (даже с несколькими ядрами), чтобы тянуть даже линуксы -- урезанные, конечно, вроде бизибокса. Более того! Параллельная многозадачность в МК существует всегда, вне зависимости от того, используем мы ОС или нет. Там же есть прерывания от периферии, которые могут вклиниваться в основной процесс в случайные моменты. А, например, МК Propeller вообще восьмиядерный, и там вообще всё выполняется истинно параллельно.
1:51:30 - Сразу после запуска процесса p, у вас parent_conn начинает принимать соединения и в этот же момент другой процесс p отправляет туда массив. Так что всё логично. Это же два разных процесса
Тимофей Федорович, спасибо за простое разъяснение. Не могли бы Вы кратко коснуться особенностей распараллеливания на CUDA и посоветовать какой-либо популярно-практический материал по этой теме. Спасибо.
Если кто помнит, не так давно были нередки вредоносы под винду, которые, когда запускались, жрали 100% процессора. Многие думали, что они какие-то мегавычисления там выполняют на проце, а на самом деле, там крутился пустой цикл в потоке, который ожидал подключения по сети. Видимо, оптимизация переключения процессов как-то так устроена, что если никакой серьёзной работы процесс не выполняет, то, типа, подождём -- недолго же, а он всё продолжает и продолжает скакать с команды на команду. Т.е. эти самые вредоносы писались какими-то очень криворукими людьми, которые либо не замечали такого палевного бага, либо не знали, как починить. А там всего-то и нужно, что чем-нибудь занять проц или уйти в сон на миллисекунду, напрмер, проверив отсутствие соединения.
Добрый день! Не по теме видео вопрос, но всё же: сейчас приняли (или принимают) закон о просветительской деятельности. Как сильно это Вас коснется? Стоит ли уже запасливо копировать Ваши видео себе на винт (а то я недавно начал Вас смотреть и изучать Python) или рано мне панику разводить?
Прерывание выставляет флаг в стеке процессора, и планировщик - watchdog при проверке пробуждает процессор для выполнения hook-а - входа полученных данных от прерывания в ожидающую программу.
Здравствуйте Тимофей. Студенты в МФТИ пишут курсовую, дипломную(по программированию), попадались или рассматривает ли МФТИ работы студентов с коммерческой точки зрения? Дипломная работа, проект который соберут трое студентов, может содержать интересные решения в различных сферах... Тему Искусственный интеллект привлекает Наше правительство в МФТИ?
ТФ, извините, конечно, но иногда видно непонимание каких-то базовых моментов с вашей стороны. Не стоит смешивать асинхронное выполнение и выполнение на потоках, не рассказав про 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
Что такое параллельное программирование? АЛУ не может работать параллельно в силу своей физики. Тогда параллельное программирование это исполнение одной программы несколькими процессорами одновременно. Выигрыш в скорости. На такое параллельное программирование я согласен. То что он описывает это не параллельное а периодическое исполнение разных программ. Время исполнения команд тоже самое. Но теряется время на переходы. В чём смысл?
Тайм-коды: многопоточность, асинхронность, 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хт
тттТ
Л
Гениальный преподаватель. С горящими глазами, юмором, уместными метафорами! Нет слов, браво!
Пишет "параллельное программирование" не отвлекаясь на свои слова. Это реальный пример такого программирования.
Тимофей Федорович, большое спасибо за ваши лекции, очень интересно и очень полезно
но не особо точно :)
Крутой канал, мужику респектище, знает своё дело
Вот это я понимаю любовь к своему делу, прекасно)) Спасибо Вам Тимофей))
Просто замечательная подача информации. Ждем продолжения, тема очень интересная
Спасибо Тимофей, всегда с большим удоволствием смoтрю ваши лекции!
Как всегда - превосходен 👏 Особенно, хотелось отметить особый талант лектора
10 выпавших блоков питания из 10
как быстро время летит, попал на ваше видео 2017 года, а вы все также молоды👍🏿
Захожу в лекции Хирьянова после чтения документации, чтобы вспомнить ощущение, когда всё понимаешь.
Шикарное объяснение, спасибо вам
Это лучшее объяснение фунтамента параллелизма, что я видел. must-see
Respect. Timofey Xiryanov You are the best. Thanks!!!
Ваши лекции прекрасны!
Великолепная подача информации. Мое вам почтение.
Тимофей Федорович, респект и уважуха, очень вдохновляете, я подсел на ваши лекции)
1:27:57 - Новая тема курса от Тимофея Федоровича))
Спасибо за то, что делаете!!!
Добрый день. Благодарю вас за прекрасные лекции. Для комфортного просмотра отключайте, пожалуйста, уведомления - они сильно отвлекают)
Лучший преподаватель в мире.
Спасибо за лекцию - очень интересно, информативно и полезно!
Супер! очень полезно. Скорее бы след. лекция.
Большое человеческое спасибо.
преподаватель от Бога! Спасибо!
лекция про потоки весьма своевременна. читаю лутца и прохожу как раз потоки
Прекрасный рассказчик и отличный материал!
Рекомендую курс и преподаватель отличный. Коммент вместо второго лайка.
Как всегда лайк. Не хватает примеров, которые вы на ходу демонстрировали на прошлых видео. Например, как с черепахой и объяснением , что происходит в конкретном месте.
Этого очень не хватает , когда высоздаете классы наследующие из базовых классов
Вспомнил момент восхищения от новости про выход Pentium D - ДВУХЯДЕРНЫЙ!!!! ЭТО КАК ДВА ПРОЦЕССОРА НО В ОДНОМ!!!
Статью прочитал тогда в игромании или стране игр, точно не помню журнал.
Спасибо Вам большое. Жаль у нас школе так не умеют преподавать материал
кто тут еще с курса на степике по многопоточному программированию на python?
Люблю питончик!!!
Барабанщику не сложно, он вёслами не крутит 😂
Нет, а если серьезно , то спасибо вам большое))
Очень интересно слушать
Хорошему не сложно))) А плохому -- когда как)) Особенно, если после концерта бьют в гримёрке ;D
++++++++++ Хороший Учитель! Респект однозначно!
Топовый лектор!
Тайм-код 8:20
Правильнее доля вычисляется так: dt/(dt+∆t)
буквально недавно задавался этим вопросом многопоточности, пришел к выводу, что не совсем блокировка нужна а реорганизация процесса, Первое это присвоение статусов для объектов с которыми работает поток(процесс) на такие как: свободен, занять процессом, обработан процессом(завершен) и еще возможно какие то дополнительные статусы. Что бы не возникало ситуации доступа нескольких процессов одновременно к одному свободному объекту и путаницы какой процесс раньше его возьмет(как в вашем примере с туалетом), какой позже и т д, организуется очередь. Сначала любой свободный или освободившийся поток попадает в очередь и ждет, пока предыдущий поток не станет занят. схема Fifo lifo. Возможно оно так организовано и я не владею всей полной информации о распределении потоков, но вижу правильной работу распределения такой.
Вижу, что Тимофей под конец лекции устал. Красавчик
Вводная общая часть прекрасна, практическая часть на питоне несколько сумбурна и непроработана.
Мне понадобилось какое-то время чтобы осознать, что "общая память" не только общая в плане физического расположения относительно акторов, но и всмысле общего доступа к одним переменным (или адресам).
1:42:14 функция is_prime не определена
Видимо какой то блок выше не отработал или так и было задумано.
Спасибо!
Круто! А почему следующая лекция скрыта?
Поправил. Проверяйте.
Тимофей Фёдорович, вы лучший, спасибо!
Interleaving. Каждые 50 минут звенит звонок начала урока. Ученик (процессор) открывает портфель, достаёт соответствующую очередному предмету тетрадку, может быть ещё что-то (линейку, циркуль) и приступает к этому уроку. И выполняет этот урок до звонка окончания урока. Затем он убирает эту тетрадь и другое в портфель.По очередному звонку начала очередного урока ученик достаёт тетрадь другого предмета согласно расписанию и т.д
Спасибо Вам
С тем, что в микроконтроллере нет операционной системы, категорически не согласен. Каких только ОС нет под них. Ну, самая популярная, конечно FreeRTOS. Но в последнее время появились камни достаточно мощные (даже с несколькими ядрами), чтобы тянуть даже линуксы -- урезанные, конечно, вроде бизибокса.
Более того! Параллельная многозадачность в МК существует всегда, вне зависимости от того, используем мы ОС или нет. Там же есть прерывания от периферии, которые могут вклиниваться в основной процесс в случайные моменты. А, например, МК Propeller вообще восьмиядерный, и там вообще всё выполняется истинно параллельно.
1:51:30 - Сразу после запуска процесса p, у вас parent_conn начинает принимать соединения и в этот же момент другой процесс p отправляет туда массив. Так что всё логично. Это же два разных процесса
Именно поэтому и должен быть вывод другой)
Тимофей Федорович, спасибо за простое разъяснение. Не могли бы Вы кратко коснуться особенностей распараллеливания на CUDA и посоветовать какой-либо популярно-практический материал по этой теме. Спасибо.
Алексей, к сожалению, не работал пока на видеокартах. Как только поработаю в этой теме и разберусь, постараюсь сделать курс или хотя бы пару лекций.
@@tkhirianov Огромное спасибо! С нетерпением буду ждать.
Огромное спасибо за интересные и полезные лекции! Жаль правда, что ссылка на гитхаб с файлами в описании не активная((
@@Throttle0496 оо, спасибо! твоя ссылка работает
Thanks :)
Если кто помнит, не так давно были нередки вредоносы под винду, которые, когда запускались, жрали 100% процессора. Многие думали, что они какие-то мегавычисления там выполняют на проце, а на самом деле, там крутился пустой цикл в потоке, который ожидал подключения по сети. Видимо, оптимизация переключения процессов как-то так устроена, что если никакой серьёзной работы процесс не выполняет, то, типа, подождём -- недолго же, а он всё продолжает и продолжает скакать с команды на команду. Т.е. эти самые вредоносы писались какими-то очень криворукими людьми, которые либо не замечали такого палевного бага, либо не знали, как починить. А там всего-то и нужно, что чем-нибудь занять проц или уйти в сон на миллисекунду, напрмер, проверив отсутствие соединения.
День добрый. А остальные 10 занятий будут выставляться? Как их можно увидеть?
Тимофей, подскажите, пожалуйста, в МФТИ есть программы обучения для тестировщиков ?
Добрый день!
Не по теме видео вопрос, но всё же: сейчас приняли (или принимают) закон о просветительской деятельности. Как сильно это Вас коснется? Стоит ли уже запасливо копировать Ваши видео себе на винт (а то я недавно начал Вас смотреть и изучать Python) или рано мне панику разводить?
Здесь точно проблем не будет, т.к. эти лекции изначально для конкретных учебных заведений. Там в законе это отдельно прописано.
Магнитов, кажется, все больше и больше. К концу курса они заполнят всю доску?:)
не знаю что я здесь делаю, но очень интересно
39:59 bus?
30:07 Это как так проц к радиатору прилепился?))) это спец экспонат, или он там вообще в сокете без держателя?)
Ну, вообще сокет можно разобрать, для некоторых китайских процессоров надо так делать
👏👍
Прерывание выставляет флаг в стеке процессора, и планировщик - watchdog при проверке пробуждает процессор для выполнения hook-а - входа полученных данных от прерывания в ожидающую программу.
30:05 процессор к радиатору "прикипел"
В начале видео всё очень было похоже на асинхронность в Python)
отличный ролик, но хотелось бы больше материалов по c++
кому чего, я вот конкретно этот урок ждал)
Здравствуйте Тимофей. Студенты в МФТИ пишут курсовую, дипломную(по программированию), попадались или рассматривает ли МФТИ работы студентов с коммерческой точки зрения? Дипломная работа, проект который соберут трое студентов, может содержать интересные решения в различных сферах... Тему Искусственный интеллект привлекает Наше правительство в МФТИ?
Может ли привлечь?
Процессоры тоже загружены на 146% 😅😂🤣
И давно киркоров преподаёт?
ТФ, извините, конечно, но иногда видно непонимание каких-то базовых моментов с вашей стороны.
Не стоит смешивать асинхронное выполнение и выполнение на потоках, не рассказав про 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 вы этим сообщением доказали, что умеете писать? Или зачем эта никому не нужная, пустая писня от профана?
В питоне нет многопоточности - есть только полупоточность.
(Шутка намекающая на проблему с GIL)
Когда кто-то пытается объяснить как работать с параллельным программированием 1:47:28
pymentor
привет из 2024
Что такое параллельное программирование? АЛУ не может работать параллельно в силу своей физики.
Тогда параллельное программирование это исполнение одной программы несколькими процессорами одновременно. Выигрыш в скорости. На такое параллельное программирование я согласен.
То что он описывает это не параллельное а периодическое исполнение разных программ. Время исполнения команд тоже самое. Но теряется время на переходы.
В чём смысл?
допустим нужно отрисовывать графику игры и одновременно организовать управления через клавиатуру , тут без таких пирирываний никак
Я вот считаю, что вы тратите моё время пока пишете на доске, монтажем можно было воспользоваться
виндовозеры хехе
Щщ
Знаю я одного "раба на галерах" - войну устроил.
Слабая лекция, важные практические моменты не рассмотрены вообще
гля. киркоров уже питон преподает)))
Вы - крутой! Гульфик Фюрер - сидеть! Не надо переплетать себя с политикой, Вы же мастер своего дела, а не политик...
*Ты же знаешь сколько преподаватели получают, ты что голодного хочешь убедить, что он сытый? Имеет полное право и не ссыт.*
No entiendo un carajo