Sobes.tech
Back to questions
Junior — Middle
82

Чем отличаются механизмы кооперативной и вытесняющей многозадачности в Python и как они реализованы?

Companies where asked
AstonAston

Answer from AI

sobes.tech AI

В Python существуют два основных механизма многозадачности:

  1. Вытесняющая многозадачность (preemptive multitasking) — когда операционная система сама переключает контекст между потоками или процессами без участия самого кода. В Python это реализовано через модули threading и multiprocessing. Однако из-за GIL (Global Interpreter Lock) потоки не выполняются параллельно на нескольких ядрах, а процессы — да.

  2. Кооперативная многозадачность (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())

Таким образом, вытесняющая многозадачность управляется ОС, а кооперативная — самим приложением через явные точки переключения.