В чем разница между кооперативной и вытесняющей многозадачностью в Python
Python
Middle
Aston
В чем разница между кооперативной и вытесняющей многозадачностью в Python
Ответы
В Python используется кооперативная многозадачность (через `asyncio`), где задачи добровольно передают управление, и вытесняющая (через потоки), где ОС решает, когда переключаться.
**Кооперативная (`asyncio`)**:
- Задачи явно передают управление через `await`
- Легковесные, нет накладных расходов на переключение
- Одна блокирующая задача может заморозить весь цикл событий
```
async def task():
await asyncio.sleep(1) # Явная передача управления
```
**Вытесняющая (потоки)**:
- ОС сама переключает потоки
- Потоки могут выполняться параллельно на разных ядрах
- Есть накладные расходы на переключение контекста
- Риск race conditions (нуются блокировки)
```
from threading import Thread
def task():
time.sleep(1) # ОС может переключиться в любой момент
```
Глобальная блокировка интерпретатора (GIL) ограничивает параллелизм потоков для CPU-bound задач. Для IO-bound задач оба подхода работают, но `asyncio` эффективнее.