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