Вопрос проверяет понимание GIL (Global Interpreter Lock) и его влияния на параллельное выполнение кода.
Python имеет GIL (Global Interpreter Lock), который предотвращает одновременное выполнение байт-кода Python в нескольких потоках. Это ограничивает параллельность CPU-bound задач, но не влияет на I/O-bound операции.
GIL — это механизм, который обеспечивает потокобезопасность CPython, но ограничивает истинную параллельность выполнения Python-кода.
Причины существования GIL:
Защита внутренних структур интерпретатора
Упрощение реализации CPython
Обеспечение атомарности простых операций
Влияние на выполнение:
CPU-bound задачи: не ускоряются многопоточностью
I/O-bound задачи: могут выполняться параллельно, так как GIL освобождается при ожидании
Пример ограничения:
import threading
import time
def cpu_intensive_task():
start = time.time()
result = 0
for i in range(10**7):
result += i
print(f"Завершено за {time.time() - start:.2f} сек")
# Запуск в одном потоке
start = time.time()
cpu_intensive_task()
cpu_intensive_task()
print(f"Общее время: {time.time() - start:.2f} сек")
# Запуск в двух потоках
start = time.time()
t1 = threading.Thread(target=cpu_intensive_task)
t2 = threading.Thread(target=cpu_intensive_task)
t1.start(); t2.start()
t1.join(); t2.join()
print(f"Общее время с потоками: {time.time() - start:.2f} сек")Обход ограничений:
Мультипроцессинг вместо многопоточности
Использование C-расширений
Альтернативные интерпретаторы (Jython, IronPython)