Потоки ненастоящие? GIL в Python

preview_player
Показать описание
В этом видео мы разоблачим иллюзию относительно быстроты работы потоков в Python. GIL превращает все объекты в потокобезопасные, но платим за это мы производительностью, и на самом деле потоки очень редко работают по-настоящему параллельно. Разбираемся, в каких ситуациях их можно использовать с выгодой.

Таймкоды:
00:00 - интро
00:36 - что такое GIL
03:22 - CPU-bound
07:03 - IO-bound
10:02 - выводы
12:48 - аутро
Рекомендации по теме
Комментарии
Автор

Ну не так, потоки в питоне могут выполняться одновременно, например когда используется библиотека numpy. Не может одновременно выполняться две инструкции самого интерпретатора например два умножения

Enerdzizer
Автор

Хотелось бы узнать, как часто вы использовали многопоточность и многопроцессорность на практике и будет ли видео про асинхронность?) И очень жаль, что видосы будут выходить реже(

sportsman
Автор

Одна из тем, где я чувствую себя неуверенно, как питонист без базы в CS) Поэтому такие вопросы интересуют и очень интересно какую книгу или статьи лучше почитать на эту тему.
1. Было бы интересно послушать про настоящую многопоточность без GIL. Что же такого дает ОС, чего мы лишены из-за GIL. И как тогда в других языках решается проблема доступа к общей памяти между потоками. Как я понимаю, процесс может занимать ресурсы сразу нескольких ядер процессора. И раскидывать потоки по ним. Вот этого мы лишены. А решение проблем с общей памятью передано в руки пользователям языка и авторам библиотек. Опять же в го своя история с горутинами. Там другой подход, когда поверх планировщика ОС с его потоками создан свой планировщик и своя сущность в виде гринлет/горутин.
2. В примере с файлом - настоящая параллельность появляется за счет того, что мы отправили системный вызов на запись данных в файл, а ОС сама на другом процессоре начала эту операцию?

MrLotrus
Автор

Всегда интересовал вопрос когда в Python стоит отдать предпочтение потокам вместо асинхронности? Вроде как корутины более легковесные.. для каких практических применений подойдёт тот или иной подход и что проще с точки зрения программирования / поддержки?

codecode
Автор

GIL - это не баг, а фича. 🙂 Также интересной темой в являются сабинтерпритаторы.

Andrew-xbnv
Автор

все объекты в потокобезопасные - не правда для сложных обьектов как panda dataframe. Пришлось сделать семафор и включать когда записывал в него. иначе обьект был битый.

evevideo
Автор

Вывод прост, используем потоки там где есть IO.... Остальное от лукавого

ityosni
Автор

Скорее всего ввод-вывод уходит в систему IO_URING.

qKjP
Автор

здравствуйте!
а выгодно ли использовать потоки при работе с сетью? я пишу много роботов для торговли криптовалютой, иногда роботы нацелены на работу с десятками юзеров, у каждого свои API ключи, когда мне нужно соверишить какое-то действие (чаще всего это цепочка действий) - я просто в цикле открываю поток на каждого юзера, и иногда внутри этих потоков я разворачиываю еще потоки с бесконечными циклами и time.sleep(n)?
Уточняю: внутри потоков обычно нет никаких вычислений, просто реквесты на биржу

blowyourbran