Встречается на собеседованиях • сегодня

Как потоки взаимодействуют с GIL в Python

В Python GIL (Global Interpreter Lock) — это механизм, который позволяет выполняться только одному потоку за раз, даже в многопоточных приложениях. Это ограничение связано с управлением памятью в CPython.

Как это работает:

  • GIL предотвращает параллельное выполнение байт-кода несколькими потоками.
  • Потоки по-прежнему переключаются, но только один активен в любой момент.
  • Это не мешает потокам работать с I/O-операциями (сеть, файлы), так как GIL освобождается во время ожидания.

Пример:

python
import threading

def count_up():
    for i in range(5):
        print("Up:", i)

def count_down():
    for i in range(5, 0, -1):
        print("Down:", i)

t1 = threading.Thread(target=count_up)
t2 = threading.Thread(target=count_down)
t1.start()
t2.start()
t1.join()
t2.join()

Вывод будет чередоваться, но не параллельно, так как GIL переключает потоки.

Когда GIL не мешает:

  • В I/O-bound задачах (сеть, файлы).
  • В мультипроцессинге (процессы имеют свои GIL).
  • В сторонних библиотеках (NumPy, C-расширения), которые отпускают GIL.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы