Sobes.tech
Middle

Asinxronluq və çox ipliklilik arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Asinxronluq və çox iş parçacığı, paralel tapşırıqları yerinə yetirmək üçün yanaşmalardır.

  • Çox iş parçacığı (multithreading) bir proses daxilində bir neçə iş parçacığı yaratmaq və icra etmək deməkdir. İş parçacıqları paralel (çox nüvəli sistemlərdə) və ya sözəldən-paralel (bir nüvəli sistemlərdə kontekst dəyişimi vasitəsilə) işlədilir. CPU intensiv tapşırıqlar üçün uyğundur.

    import threading
    import time
    
    def task(name):
        # İş simulyasiyası
        time.sleep(1)
        print(f"İş parçacığı {name} tamamlandı")
    
    threads = []
    for i in range(3):
        thread = threading.Thread(target=task, args=(i,))
        threads.append(thread)
        thread.start() # İş parçacığını işə sal
    
    for thread in threads:
        thread.join() # İş parçacığının tamamlanmasını gözlə
    
    print("Bütün iş parçacqları tamamlandı")
    
  • Asinxronluq (asynchronous) tək bir icra iş parçacığından (və ya az sayda) istifadə etməyə əsaslanır və hadisələr əsaslı memarlıq ilə işləyir. Bloklayıcı əməliyyatın (məsələn, giriş-çıxış) tamamlanmasını gözləmək əvəzinə, tapşırıq "idarəni verir" və digər tapşırıqlar icra oluna bilər, sonra isə "yenidən başlayır" əməliyyat tamamlandıqda. I/O-bound tapşırıqlar üçün uyğundur.

    import asyncio
    import time
    
    async def async_task(name):
        # Asinxron bloklayıcı əməliyyatın simulyasiyası (məsələn, şəbəkə sorğusu)
        await asyncio.sleep(1)
        print(f"Asinxron tapşırıq {name} tamamlandı")
    
    async def main():
        tasks = []
        for i in range(3):
            task = asyncio.create_task(asyncio.sleep(1))
            tasks.append(task)
    
        await asyncio.gather(*tasks) # Asinxron tapşırıqların tamamlanmasını gözlə
    
    if __name__ == "__main__":
        asyncio.run(main())
        print("Bütün asinxron tapşırıqlar tamamlandı")
    

Əsas fərqlər:

Aspect Multithreading Asyncio
İcra Bir neçə iş parçacığı, paralel və ya pseudo-paralel Ümumiyyətlə, bir iş parçacığı ilə vəzifə dəyişimi
Model Əməliyyat sisteminin iş parçacqlarına əsaslanır, preemptive çoxlu tapşırıq Hadisələr döngəsinə əsaslanır, kooperativ çoxlu tapşırıq
Çətinlik İş parçacığı idarəetməsi, kilidlər, GIL (Python-də) Korutinlərin idarə olunması, await/async
İstifadə CPU-bound tapşırıqlar I/O-bound tapşırıqlar
GIL (Python) CPU-bound kod üçün real paralelliyi məhdudlaşdırır I/O-bound tapşırıqlar üçün problem deyil