Что такое кооперативная многозадачность

Ответ

Кооперативная многозадачность (cooperative multitasking) — это модель, в которой задачи выполняются до тех пор, пока сами добровольно не передадут управление планировщику. В отличие от вытесняющей многозадачности, операционная система не прерывает задачу принудительно.

Основной принцип: Задача должна явно указать в коде, в какой момент она готова приостановиться и позволить другим задачам выполниться. Если одна задача «зависнет» и не передаст управление, она заблокирует всю систему.

В современном Python этот механизм реализуется с помощью async/await.

Пример на Python с asyncio:

import asyncio

async def task(name, delay):
    print(f"Задача {name}: начала выполнение.")
    # Добровольная передача управления на время ожидания I/O
    await asyncio.sleep(delay)
    print(f"Задача {name}: завершена.")

async def main():
    # Задачи выполняются конкурентно, передавая управление друг другу
    await asyncio.gather(
        task("A", 1),
        task("B", 2)
    )

asyncio.run(main())

Преимущества и недостатки:

  • Плюсы: Минимальные накладные расходы на переключение контекста, полный контроль над выполнением.
  • Минусы: Одна плохо написанная (блокирующая) задача может остановить все остальные.