Ответ
Кооперативная многозадачность (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())
Преимущества и недостатки:
- Плюсы: Минимальные накладные расходы на переключение контекста, полный контроль над выполнением.
- Минусы: Одна плохо написанная (блокирующая) задача может остановить все остальные.