Встречается на собеседованиях • сегодня
Работал ли с GIL
Да, работал. GIL (Global Interpreter Lock) — это механизм в CPython, который позволяет выполняться только одному потоку за раз, даже на многоядерных системах. Это упрощает управление памятью и делает CPython потокобезопасным, но ограничивает параллелизм.
Когда это проблема:
- При CPU-bound задачах (например, вычисления), где потоки не ускоряют выполнение.
- В многопоточных приложениях, где требуется настоящий параллелизм.
Как обойти:
- Использовать
multiprocessingвместоthreadingдля CPU-bound задач. - Применять асинхронность (asyncio) для I/O-bound задач.
- Использовать C-расширения или альтернативные интерпретаторы (PyPy, Jython).
Пример с threading:
python
import threading
def count():
n = 0
for _ in range(10_000_000):
n += 1
t1 = threading.Thread(target=count)
t2 = threading.Thread(target=count)
t1.start(); t2.start()
t1.join(); t2.join() # Выполнится медленнее, чем последовательноДля CPU-bound задач лучше multiprocessing:
python
from multiprocessing import Process
p1 = Process(target=count)
p2 = Process(target=count)
p1.start(); p2.start()
p1.join(); p2.join() # Работает быстрее на многоядерных системах
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы