Sobes.tech
Middle

Asinxronlik va ko'p ipliqlik o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Asinxronlik va ko'p oqimli dasturlash - bu parallel vazifalarni bajarish uchun yondashuvlar.

  • Ko'p oqimli dasturlash (multithreading) bir jarayon ichida bir nechta oqimlarni yaratish va bajarishni anglatadi. Oqimlar parallel (ko'p yadroli tizimlarda) yoki pseudo-parallel (bir yadroli tizimlarda kontekst almashinuvi orqali) bajariladi. CPU intensiv vazifalar uchun mos.

    import threading
    import time
    
    def task(name):
        # Ish simulyatsiyasi
        time.sleep(1)
        print(f"Oqim {name} tugadi")
    
    threads = []
    for i in range(3):
        thread = threading.Thread(target=task, args=(i,))
        threads.append(thread)
        thread.start() # Oqimni ishga tushirish
    
    for thread in threads:
        thread.join() # Oqim tugashini kutish
    
    print("Barcha oqimlar tugadi")
    
  • Asinxronlik (asynchronous) bitta bajarish oqimidan (yoki ozroq) foydalanishga asoslangan va voqealar asosidagi arxitekturaga ega. To'xtash operatsiyasining (masalan, kirish-chiqish) yakunlanishini kutmasdan, vazifa "kontrolni beradi" va boshqa vazifalar bajarila oladi, keyin "qayta boshlanadi" operatsiya tugagach. I/O-bound vazifalar uchun mos.

    import asyncio
    import time
    
    async def async_task(name):
        # Asinxron bloklovchi operatsiya simulyatsiyasi (masalan, tarmoq so'rovi)
        await asyncio.sleep(1)
        print(f"Asinxron vazifa {name} tugadi")
    
    async def main():
        tasks = []
        for i in range(3):
            task = asyncio.create_task(async_task(i))
            tasks.append(task)
    
        await asyncio.gather(*tasks) # Asinxron vazifalarni yakunlashni kutish
    
    if __name__ == "__main__":
        asyncio.run(main())
        print("Barcha asinxron vazifalar tugadi")
    

Asosiy farqlar:

Nuqta Ko'p oqimli dasturlash (Threading) Asinxronlik (Asyncio)
Bajarish Bir nechta oqimlar, parallel yoki pseudo-parallel Odatda bitta oqim, vazifa almashinuvi bilan
Model OS oqimlariga asoslangan, preemptive multitasking Voqealar tsirkuli, kooperativ multitasking
Murakkablik Oqimlarni boshqarish, blokirovka, GIL (Python) Korutinlarni boshqarish, await/async
Foydalanish CPU-bound vazifalar I/O-bound vazifalar
GIL (Python) CPU-bound kod uchun haqiqiy parallelizmni cheklaydi I/O-bound vazifalar uchun muammo emas