Sobes.tech
Middle

რა არის ასინქრონულობისა და მრავალმხრივი მუშაობის განსხვავება?

sobes.tech AI

პასუხი AI-სგან

Ասինխրոնությունն ու բազմահոսքային աշխատանքը՝ երկու մոտեցում են հարյուրավոր խնդիրների կատարման համար:

  • Բազմահոսքային (multithreading) ենթադրում է միաժամանակ մի քանի հոսքերի ստեղծում և գործարկում մեկ գործընթացի շրջանակում։ Հոսքերը գործարկվում են համաժամանակ (շատագերանային համակարգերում) կամ պսևդո-համաժամանակ (մեկագերանային համակարգերում կոնտեքստի փոխարկմամբ): Հարմար է CPU-օգտագործող առաջադրանքների համար:

    import threading
    import time
    
    def task(name):
        # Աշխատանքի իմիտացիա
        time.sleep(1)
        print(f"Հոսք {name} ավարտվեց")
    
    հոսքեր = []
    for i in range(3):
        հոսք = threading.Thread(target=task, args=(i,))
        հոսքեր.append(հոսք)
        հոսք.start() # Հոսքի գործարկում
    
    for հոսք in հոսքեր:
        հոսք.join() # Ապահովում է հոսքի ավարտը
    
    print("Բոլոր հոսքերը ավարտվեցին")
    
  • Ասինխրոնություն (asynchronous) հիմնված է մեկ հոսքի օգտագործման վրա (կամ փոքր թվով հոսքերի)՝ միջոցառումների ուղղված կառուցվածքով։ Փոխարենը սպասել բլոկավորող օպերացիայի ավարտին (օրինակ՝ մուտք-արտահոսք), առաջադրանքը "փոխանցում" է կառավարումը՝ թույլ տալով մյուս առաջադրանքներին գործարկել, և ապա "վերսկսում" այն, երբ օպերացիան ավարտվի։ Հարմար է I/O-կենտրոնացված առաջադրանքների համար:

    import asyncio
    import time
    
    async def async_task(name):
        # Նկատում ասինխրոն բլոկավորող օպերացիա (օրինակ՝ ցանցային հարցում)
        await asyncio.sleep(1)
        print(f"Ասինխրոն առաջադրանք {name} ավարտվեց")
    
    async def main():
        առաջադրանքներ = []
        for i in range(3):
            առաջադրանք = asyncio.create_task(async_task(i))
            առաջադրանքներ.append(առաջադրանք)
    
        await asyncio.gather(*առաջադրանքներ) # Սպասում ասինխրոն առաջադրանքների ավարտին
    
    if __name__ == "__main__":
        asyncio.run(main())
        print("Բոլոր ասինխրոն առաջադրանքները ավարտվեցին")
    

Հիմնական տարբերությունները՝

Աспեկտ Բազմահոսքային (Threading) Ասինխրոն (Asyncio)
Աշխատանք Մի քանի հոսքեր, միաժամանակ կամ պսևդո- Հաճախ մեկ հոսք, փոխարկման միջոցով
Մոդել Հիմնված օպերացիոն համակարգի հոսքերի վրա, նախազգուշական բազմագործառականություն Հիմնված իրադարձությունների ցիկլի վրա, համագործակցային բազմագործառականություն
Սխլություն Հոսքերի կառավարում, փակումներ, GIL (Python-ում) Կորուտինների կառավարում, await/async
Օգտագործում CPU-կենտրոնացված առաջադրանքներ I/O-կենտրոնացված առաջադրանքներ
GIL (Python) Մեղմում է իրական համաժամանակությունը CPU-կենտրոնացված կոդի համար Չի խնդիր I/O-կենտրոնացված առաջադրանքների համար