Back to questions
Junior — Middle
49
Чем ограничение GIL влияет на параллельную работу Python-программ?
Companies where asked
Ubic
Black Wall Group
Answer from AI
sobes.tech AI
GIL (Global Interpreter Lock) — это механизм в CPython, который гарантирует, что в каждый момент времени только один поток выполняет байт-код Python. Это ограничение влияет на параллельную работу программ следующим образом:
- Многопоточность не даёт прироста производительности в CPU-bound задачах. Даже если в программе несколько потоков, они не смогут одновременно использовать несколько ядер процессора для выполнения Python-кода.
- I/O-bound задачи выигрывают от многопоточности. Потоки, ожидающие ввода-вывода, освобождают GIL, позволяя другим потокам работать.
Для обхода GIL часто используют:
- Многопроцессность (модуль
multiprocessing), где каждый процесс имеет свой интерпретатор и GIL. - Использование расширений на C, которые могут освобождать GIL во время тяжёлых вычислений.
Пример:
import threading
import time
def cpu_bound():
count = 0
for _ in range(10**7):
count += 1
threads = [threading.Thread(target=cpu_bound) for _ in range(4)]
start = time.time()
for t in threads:
t.start()
for t in threads:
t.join()
print(f"Time: {time.time() - start} seconds")
Несмотря на 4 потока, время выполнения почти такое же, как и для одного потока, из-за GIL.