Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: non, blocking, recv

Почему асинхронный код не блокируется на recv и подобных операциях?

Вопрос проверяет понимание различий между блокирующим и неблокирующим вводом-выводом.

Короткий ответ

Асинхронный код использует неблокирующие операции. Вместо ожидания данных он регистрирует интерес к событию. Когда данные появляются, event loop получает уведомление. Пока данных нет, выполняются другие задачи. Поэтому поток не блокируется.

Длинный ответ

Блокировка возникает, когда поток ждёт завершения операции.

Что происходит в синхронном коде

В обычном коде вызов recv:

  • останавливает поток

  • ждёт данные

  • ничего больше не выполняется

Это плохо масштабируется при большом числе соединений.

Как работает асинхронный recv

В асинхронной модели:

  • сокет переводится в неблокирующий режим

  • recv не ждёт данные напрямую

  • event loop следит за готовностью сокета

Если данных нет:

  • корутина приостанавливается

  • управление возвращается loop

Связь с операционной системой

ОС уведомляет:

  • «сокет готов к чтению»

  • «данные появились»

Только после этого корутина продолжает выполнение.

Упрощённая схема

  1. Корутина вызывает await recv

  2. Event loop регистрирует сокет

  3. Поток освобождается

  4. При событии задача возобновляется

Краткий вывод

Асинхронный код не блокируется, потому что он ждёт не данные, а событие от операционной системы.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Python

    Python

Ключевые слова

#non

#blocking

#recv

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.