Asenkronluk ile çok iş parçacıklı olma arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Eşzamansızlık ve çok iş parçacığı, paralel görevleri yürütmek için yaklaşımlardır.
-
Çok iş parçacığı (multithreading), aynı süreç içinde birkaç iş parçacığı oluşturmayı ve çalıştırmayı içerir. İş parçacıkları paralel (çok çekirdekli sistemlerde) veya sözde-paralel (tek çekirdekli sistemlerde bağlam değişimi yoluyla) çalıştırılır. CPU yoğun görevler için uygundur.
import threading import time def task(name): # İş simülasyonu 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ı başlat for thread in threads: thread.join() # İş parçacığının tamamlanmasını bekle print("Tüm iş parçacıkları tamamlandı") -
Eşzamansızlık (asynchronous), tek bir yürütme iş parçacığı (veya az sayıda) kullanmaya dayanır ve olay odaklı mimari ile çalışır. Engelleyici bir işlemin (örneğin, giriş-çıkış) tamamlanmasını beklemek yerine, görev "kontrolü devralır" ve diğer görevlerin çalışmasına izin verir, sonra işlem tamamlandığında "devam eder". I/O-bound görevler için uygundur.
import asyncio import time async def async_task(name): # Bir asenkron engelleyici işlem simülasyonu (örneğin, ağ isteği) await asyncio.sleep(1) print(f"Asenkron görev {name} tamamlandı") async def main(): tasks = [] for i in range(3): task = asyncio.create_task(async_task(i)) tasks.append(task) await asyncio.gather(*tasks) # Asenkron görevlerin tamamlanmasını bekle if __name__ == "__main__": asyncio.run(main()) print("Tüm asenkron görevler tamamlandı")
Ana farklar:
| Aç aspect | Çok iş parçacığı (Threading) | Eşzamansızlık (Asyncio) |
|---|---|---|
| Yürütme | Birden fazla iş parçacığı, paralel veya sözde-paralel | Genellikle tek iş parçacığı ile görev değişimi |
| Model | İşletim sistemi iş parçacıklarına dayanır, kesintili çoklu görev | Olay döngüsüne dayanır, kooperatif çoklu görev |
| Karmaşıklık | İş parçacığı yönetimi, kilitler, GIL (Python'da) | Koroutine yönetimi, await/async |
| Kullanım | CPU-bound görevler | I/O-bound görevler |
| GIL (Python) | CPU-bound kod için gerçek paralelliği sınırlar | I/O-bound görevler için sorun değildir |