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 |