Является ли асинхронность в Python синонимом кооперативной многозадачности

Ответ

Да, по своей сути, асинхронность в Python, реализованная через библиотеку asyncio, является формой кооперативной многозадачности.

Это означает, что задачи (корутины) выполняются в одном потоке и добровольно уступают управление друг другу в определённых точках (оператор await). Центральным элементом является цикл событий (event loop), который отслеживает готовые к выполнению задачи и передаёт им управление.

Это ключевое отличие от вытесняющей многозадачности (используемой в потоках/процессах), где операционная система сама принудительно переключает контекст между задачами.

Пример:

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", 1),
        task("B", 0.5)
    )

asyncio.run(main())

Порядок вывода:

Задача A: начало
Задача B: начало
Задача B: завершение (т.к. sleep(0.5) закончился раньше)
Задача A: завершение