) 🔹 Что такое 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=