Sobes.tech
Middle

Kāda ir atšķirība starp asinhronumu un daudzprocesu?

sobes.tech AI

Atbilde no AI

Asinhronitāte un daudzvadu izpilde ir divi pieejas paralēlu uzdevumu veikšanai.

  • Daudzvadu izpilde (multithreading) ietver vairāku pavedienu izveidi un izpildi vienā procesā. Pavedieni tiek izpildīti paralēli (uz daudzkodolu sistēmām) vai pseudoparalēli (uz vienkodolu sistēmām, pārslēdzoties starp kontekstu). Piemērots CPU intensīviem uzdevumiem.

    import threading
    import time
    
    def task(name):
        # Darba imitācija
        time.sleep(1)
        print(f"Pavediens {name} pabeigts")
    
    pavedieni = []
    for i in range(3):
        paved = threading.Thread(target=task, args=(i,))
        pavedieni.append(paved)
        paved.start() # Pavediena palaišana
    
    for paved in pavedieni:
        paved.join() # Gaida pavediena pabeigšanu
    
    print("Visi pavedieni pabeigti")
    
  • Asinhronitāte (asynchronous) ir balstīta uz viena pavediena izmantošanu (vai nelielu skaitu pavedienu) ar notikumu orientētu arhitektūru. Tā vietā, lai gaidītu bloķējošu operāciju (piemēram, ievadi-izvadi), uzdevums "nodod" vadību, ļaujot citiem uzdevumiem darboties, un "turpina" pēc operācijas pabeigšanas. Piemērots I/O ierobežotiem uzdevumiem.

    import asyncio
    import time
    
    async def async_task(name):
        # Asinhrona bloķējoša operācija (piemēram, tīkla pieprasījums)
        await asyncio.sleep(1)
        print(f"Asinhrona uzdevums {name} pabeigts")
    
    async def main():
        uzdevumi = []
        for i in range(3):
            uzdevums = asyncio.create_task(async_task(i))
            uzdevumi.append(uzdevums)
    
        await asyncio.gather(*uzdevumi) # Gaida asinhrono uzdevumu pabeigšanu
    
    if __name__ == "__main__":
        asyncio.run(main())
        print("Visi asinhroni uzdevumi pabeigti")
    

Galvenās atšķirības:

Aspekts Daudzvadu izpilde (Threading) Asinhronitāte (Asyncio)
Izpilde Vairāki pavedieni, paralēli vai pseudoparalēli Parasti viens pavedienis ar pārslēgšanos starp uzdevumiem
Modelis Balstīts uz OS pavedieniem, izstumjošs daudzuzdevumu režīms Balstīts uz notikumu ciklu, kooperatīvs daudzuzdevumu režīms
Sarežģītība Pavedienu pārvaldība, aizslēgumi, GIL (Python) Korutinu pārvaldība, await/async
Lietošana CPU ierobežotas uzdevumi I/O ierobežotas uzdevumi
GIL (Python) Ierobežo reālo paralelismu CPU ierobežotā kodā Nav problēmas ar I/O ierobežotiem uzdevumiem