В чем разница между вытесняющей и конкурентной многозадачность
Python
Middle
Без компании
В чем разница между вытесняющей и конкурентной многозадачность
Ответы
Вытесняющая многозадачность (preemptive) — это когда операционная система сама решает, когда переключать контекст между потоками/процессами. Например, в Python потоки (threading) используют вытесняющую модель — ОС может прервать выполнение потока в любой момент.
Конкурентная многозадачность (cooperative) — это когда переключение между задачами контролирует сам код. Например, корутины в asyncio работают именно так — они должны явно отдавать управление (await), иначе другие задачи не выполнятся.
Пример с asyncio:
```
import asyncio
async def task1():
print("Task 1 started")
await asyncio.sleep(1) # Явно отдаем управление
print("Task 1 finished")
async def task2():
print("Task 2 started")
await asyncio.sleep(0.5)
print("Task 2 finished")
asyncio.run(asyncio.gather(task1(), task2()))
```
Ключевые различия:
- Вытесняющая: переключение управляется ОС, может быть в любой момент
- Конкурентная: переключение происходит только в точках явного ожидания
- В Python threading — вытесняющая, asyncio — конкурентная