В обычной сборке CPython GIL позволяет только одному потоку исполнять Python-код в одном интерпретаторе одновременно. Поэтому потоки обычно не ускоряют чистые CPU-bound вычисления.
Что такое GIL в Python и как он влияет на многопоточность и CPU-bound задачи?
В обычной сборке CPython GIL позволяет только одному потоку исполнять Python-код в одном интерпретаторе одновременно. Поэтому потоки обычно не ускоряют чистые CPU-bound вычисления.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В обычной сборке CPython GIL позволяет только одному потоку исполнять Python-код в одном интерпретаторе одновременно. Поэтому потоки обычно не ускоряют чистые CPU-bound вычисления.
Потоки остаются полезны для I/O, поскольку блокировка освобождается при многих операциях ожидания. Некоторые C-расширения также освобождают GIL во время вычислений. Для параллельного CPU-кода используют процессы или подходящие нативные библиотеки; учитывают стоимость передачи данных. GIL не заменяет защиту общих бизнес-инвариантов от гонок. Существуют отдельные free-threaded-сборки CPython без привычного GIL, поэтому утверждение «Python всегда однопоточный» неверно; важно назвать реализацию, сборку и характер работы.