Sobes.tech
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.