🔹 GIL: почему Python блокирует потоки (и что с этим делать) 🔹 Что такое GIL и как он влияет на threading и parallelism? 🔸 GIL (Global Interpreter Lock) появился, чтобы защитить внутреннее состояние CPython — в основном простая реализация счётчика ссылок и структуры объектов. Без GIL пришлось бы тонко синхронизировать доступ на C‑уровне, что сильно усложнило бы реализацию интерпретатора.
🔸 GIL сериализует выполнение байт-кода, поэтому в CPU‑bound (CPU — Central Processing Unit) задачах потоки (threading) в CPython не дают настоящего параллелизма. Для IO (Input/Output) потоков выигрыш остаётся полезным. multiprocessing создаёт отдельные процессы, обходит GIL и даёт настоящий parallelism, но стоит дороже по памяти и IPC.
🔸 Практика: для сетевых/дисковых задач — threading или async; для тяжёлых вычислений — multiprocessing или C/NumPy-библиотеки без GIL. Минимальный пример запуска двух воркеров:
def worker(n): s=0 for i in range(n): s+=i print(s)
from threading import Thread t1=Thread(target=worker, args=(10_000_000,)) t2=Thread(target=worker, args=(10_000_000,)) t1.start(); t2.start(); t1.join(); t2.join()
from multiprocessing import Process p1=Process(target=worker, args=(10_000_000,)) p2=Process(target=worker, args=(10_000_000,)) p1.start(); p2.start(); p1.join(); p2.join()
📚 Итог: GIL упрощает интерпретатор, мешает CPU‑параллелизму — выбирайте инструмент по характеру нагрузки.
➡️ Мы в Telegram - Сетке - ВК Буду рад вашей реакции здесь⬇️
В этом посте были ссылки, но мы их удалили по правилам Сетки
· 29.04
gil это одна из тех тем которую спрашивают почти на каждом собесе по python - но реально сталкиваются с проблемой только когда пишут cpu-bound код на тредах. для io-bound всё нормально, для cpu - multiprocessing или asyncio. интересно что в python 3.13 добавили экспериментальный режим без gil - скоро этот вопрос на собесах изменится
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён