Sobes.tech
Назад к вопросам
Middle
2

Как работает EventLoop в Python? Чем асинхронность отличается от многопоточности и многопроцессорности?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В Python EventLoop — это цикл обработки событий, который управляет выполнением асинхронных задач. Он отслеживает готовность операций ввода-вывода и запускает соответствующие callback-функции или корутины, когда операции завершаются.

Асинхронность в Python (например, с помощью asyncio) позволяет запускать множество задач, не блокируя основной поток, используя один поток и переключаясь между задачами при ожидании ввода-вывода.

Отличия от многопоточности и многопроцессорности:

  • Асинхронность — однопоточный, неблокирующий подход. Задачи переключаются в момент ожидания (например, чтения из сети), что экономит ресурсы и уменьшает накладные расходы на переключение контекста.

  • Многопоточность — несколько потоков в одном процессе, которые могут выполняться параллельно, но в Python из-за GIL (Global Interpreter Lock) настоящая параллельность ограничена, особенно для CPU-bound задач.

  • Многопроцессорность — несколько процессов, каждый со своей памятью, что позволяет обойти GIL и выполнять задачи параллельно на нескольких ядрах, но с большими накладными расходами на коммуникацию.

Пример простого EventLoop с asyncio:

import asyncio

async def say_hello():
    await asyncio.sleep(1)
    print("Hello")

async def main():
    await asyncio.gather(say_hello(), say_hello())

asyncio.run(main())

Здесь две корутины выполняются асинхронно в одном потоке, переключаясь при ожидании sleep.