Ի՞նչ է տարբերությունը ասինխրոնության և բազմապտույտության միջև։
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-կենտրոնացված առաջադրանքների համար |