Sobes.tech
Junior — Middle
128

Čime se razlikuju mehanizmi kooperativne i preemptivne multitaskingu u Pythona i kako su implementirani?

Компаније где су питане
AstonAston

Одговор од АИ

sobes.tech АИ

В 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())

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