Programlamada paralellik nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Programlamada paralelizm, aynı anda birkaç görevin yürütülmesi veya bunun gibi görünmesi anlamına gelir, bu da uygulamaların performansını ve yanıt verme kabiliyetini artırır.
Birkaç paralelizm türü ayırt edilir:
-
Çok işlemcilik (Multiprocessing): Her biri kendi adres alanına sahip bağımsız birkaç işlem kullanır. Bu, CPython'daki GIL (Global Interpreter Lock) sınırlamasını aşar ve CPU yoğun görevler için uygundur.
import multiprocessing import time def worker(num): """Bir iş""" time.sleep(1) print(f'İşçi {num} tamamlandı') if __name__ == '__main__': processes = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) processes.append(p) p.start() for p in processes: p.join() print("Tüm işçiler tamamlandı") -
Çok iş parçacığı (Multithreading): Aynı işlem içinde birkaç iş parçacığı kullanır, ortak adres alanını paylaşır. CPython'da GIL nedeniyle, iş parçacıkları CPU-bound görevler için paralel çalışmaz, ancak I/O-bound görevler için etkilidir.
import threading import time def worker(num): """Bir iş""" time.sleep(1) # I/O işlemi simülasyonu print(f'İş Parçacığı {num} tamamlandı') threads = [] for i in range(5): t = threading.Thread(target=worker, args=(i,)) threads.append(t) t.start() for t in threads: t.join() print("Tüm iş parçacıkları tamamlandı") -
Asenkron programlama (Asyncio): Tek bir iş parçacığı ve olay döngüsü (event loop) kullanır, görevlerin yürütülmesini yönetir. Yüksek trafikli I/O-bound uygulamalar ve web sunucuları için uygundur. I/O beklerken yürütmeyi engellemez.
import asyncio import time async def worker(num): """Bir asenkron iş""" await asyncio.sleep(1) # Asenkron I/O bekleme print(f'Asenkron işçi {num} tamamlandı') async def main(): tasks = [] for i in range(5): task = asyncio.create_task(worker(i)) tasks.append(task) await asyncio.gather(*tasks) print("Tüm asenkron işçiler tamamlandı") if __name__ == '__main__': asyncio.run(main())
Yaklaşım seçimi, görevin doğasına bağlıdır:
| Yaklaşım | CPU-bound görevler | I/O-bound görevler | GIL | Bellek kullanımı |
|---|---|---|---|---|
| Çok işlemcilik | Mükemmel | İyi | Aşar | Büyük (kendi işlemi) |
| Çok iş parçacığı | Kötü (GIL nedeniyle) | Mükemmel | Engeller | Küçük (ortak işlem) |
| Asenkron | Kötü | Mükemmel | Engellemez | Küçük (bir iş parçacığı) |
Paralelizm, yarış koşulları ve kilitlenmeleri önlemek için senkronizasyon ve kaynakların dikkatli yönetimini gerektirir.