Чем отличаются механизмы кооперативной и вытесняющей многозадачности в Python и как они реализованы?
Answer from AI
sobes.tech AI
В Python существуют два основных механизма многозадачности:
-
Вытесняющая многозадачность (preemptive multitasking) — когда операционная система сама переключает контекст между потоками или процессами без участия самого кода. В Python это реализовано через модули
threadingиmultiprocessing. Однако из-за GIL (Global Interpreter Lock) потоки не выполняются параллельно на нескольких ядрах, а процессы — да. -
Кооперативная многозадачность (cooperative multitasking) — когда переключение контекста происходит явно в коде, например, через
asyncioиawait. Здесь задачи сами уступают управление, что позволяет эффективно работать с большим числом операций ввода-вывода.
Пример кооперативной многозадачности с 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', 1), task('B', 2))
asyncio.run(main())
Таким образом, вытесняющая многозадачность управляется ОС, а кооперативная — самим приложением через явные точки переключения.