Sobes.tech
Middle

Kuo skiriasi asinchroniškumas nuo daugiagijumo?

sobes.tech AI

Atsakymas iš AI

Asinchroniškumas ir daugiagijų vykdymas yra du būdai vykdyti lygiagrečius uždavinius.

  • Daugiagijų vykdymas (multithreading) apima kelių gijų kūrimą ir vykdymą viename procese. Gijos vykdomos lygiagrečiai (daugialypėse sistemose) arba pseudolygiagrečiai (viengijėse sistemose per konteksto perjungimą). Tinka CPU intensyviems uždaviniams.

    import threading
    import time
    
    def task(name):
        # Darbo imitacija
        time.sleep(1)
        print(f"Gija {name} baigta")
    
    gijos = []
    for i in range(3):
        gija = threading.Thread(target=task, args=(i,))
        gijos.append(gija)
        gija.start() # Gijos paleidimas
    
    for gija in gijos:
        gija.join() # Laukiama gijos pabaigos
    
    print("Visos gijos baigtos")
    
  • Asinchroniškumas (asynchronous) grindžiamas vienos gijos naudojimu (arba keliomis mažomis gijomis) su įvykių valdomu architektūros modeliu. Vietoje blokuojančios operacijos (pvz., įvesties-išvesties) pabaigos, užduotis "perduoda" valdymą, leidžiant kitoms užduotims vykdyti, ir "tęsiama", kai operacija baigta. Tinka I/O ribotoms užduotims.

    import asyncio
    import time
    
    async def async_task(name):
        # Asinchroninė blokuojanti operacija (pvz., tinklo užklausa)
        await asyncio.sleep(1)
        print(f"Asinchroninė užduotis {name} baigta")
    
    async def main():
        užduotys = []
        for i in range(3):
            užduotis = asyncio.create_task(async_task(i))
            užduotys.append(užduotis)
    
        await asyncio.gather(*užduotys) # Laukiama asinchroninių užduočių pabaigos
    
    if __name__ == "__main__":
        asyncio.run(main())
        print("Visos asinchroninės užduotys baigtos")
    

Pagrindiniai skirtumai:

Aspektas Daugiagijinis vykdymas (Threading) Asinchroniškumas (Asyncio)
Vykdymas Kelios gijos, lygiagrečiai arba pseudolygiagrečiai Paprastai viena gija su perjungimu tarp užduočių
Modelis Pagrįstas OS gijais, išstūmimo daugtaskumas Pagrįstas įvykių ciklu, kooperatyvinis daugtaskumas
Sudėtingumas Gijų valdymas, užraktai, GIL (Python) Korutinos valdymas, await/async
Naudojimas CPU ribotos užduotys I/O ribotos užduotys
GIL (Python) Ribojasi su realiu paralelizmu CPU ribotame kode Nėra problemos I/O ribotoms užduotims