Sobes.tech
Junior — Middle
108

Python-да кооперативті және алдын-ала басымдылықты көп тапсырманың механизмдерінің айырмашылықтары қандай және олар қалай жүзеге асырылады?

Сұралған компаниялар
AstonAston

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

Осылайша, қысыммен көп тапсырмалау ОС-тың басқаруында болса, кооперативті — қосымшаның өзі анықталған нүктелер арқылы жүзеге асады.