Ответ
Кооперативная многозадачность — это модель конкурентности, при которой задачи (корутины) добровольно уступают контроль над процессором, позволяя другим задачам выполняться. В отличие от вытесняющей многозадачности, где операционная система принудительно переключает контекст, здесь переключение происходит только в явных точках, например, при вызове await
.
Этот подход идеально подходит для I/O-bound операций (сетевые запросы, работа с файлами), так как программа может выполнять другую работу, пока ожидает ответа от внешнего ресурса.
Ключевые особенности в Python:
- Ключевые слова:
async def
для объявления корутин иawait
для передачи управления. - Event Loop: Оркестратор (
asyncio
), который управляет запуском и переключением корутин. - Блокировка: Одна долго выполняющаяся синхронная операция (без
await
) может заблокировать весь event loop и все остальные задачи.
Пример с asyncio
:
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 началась
# Задача B началась
# Задача B завершилась
# Задача A завершилась