Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: coroutine, async/await, event loop, context switch, cooperative multitasking

По какому принципу переключаются корутины?

Вопрос проверяет понимание механизма переключения контекста между корутинами в асинхронном программировании.

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

Корутины переключаются кооперативно, то есть добровольно передают управление. В Python это происходит на операциях ожидания (await), когда корутина встречает асинхронный вызов. Event loop управляет очередью корутин и возобновляет их выполнение после завершения ожидания. Это позволяет эффективно использовать время процессора без блокировок.

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

Принцип переключения корутин

Корутины работают на основе кооперативной многозадачности. В отличие от потоков, которые могут быть прерваны планировщиком ОС в любой момент, корутина сама решает, когда передать управление. Это происходит в точках ожидания, обозначенных ключевым словом await.

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

Event loop — это центральный диспетчер, который управляет выполнением корутин. Когда корутина встречает await, она приостанавливается и возвращает управление event loop'у. Event loop проверяет, какие корутины готовы к выполнению (например, завершилась операция ввода-вывода), и возобновляет их с того места, где они остановились.

Пример на Python

import asyncio

async def task(name, delay):
    print(f"{name} началась")
    await asyncio.sleep(delay)  # точка переключения
    print(f"{name} завершена")

async def main():
    await asyncio.gather(
        task("A", 2),
        task("B", 1)
    )

asyncio.run(main())

В этом примере корутина A запускается, доходит до await asyncio.sleep(2) и передаёт управление. Event loop запускает корутину B, которая ждёт 1 секунду. Через 1 секунду B завершается, а через 2 — A. Переключение происходит только в точках await.

Где применяется

Этот механизм идеален для I/O-bound задач: работа с сетью, файлами, базами данных. Он позволяет обрабатывать тысячи соединений без создания потоков, экономя память и избегая проблем синхронизации.

Вывод: Кооперативное переключение корутин эффективно для асинхронных операций, где ожидание внешних ресурсов — основное узкое место. Используйте его в веб-серверах, чат-приложениях и любых системах с большим количеством параллельных I/O операций.

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

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

#coroutine

#async/await

#event loop

#context switch

#cooperative multitasking

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

  • Аватар

    Python Guru

    Sergey Filichkin

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