Proqramlaşdırmada paralellik nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Proqramlaşdırmada paralelizm, bir neçə vəzifənin eyni vaxtda yerinə yetirilməsi və ya eyni vaxtda yerinə yetirilməsinin təsviri kimi qəbul edilir, bu da tətbiqlərin performansını və cavabvermə qabiliyyətini artırır.
Bir neçə paralelizm növü ayırd edilir:
-
Çox prosessli (Multiprocessing): Hər biri öz ünvan sahəsinə malik olan müstəqil bir neçə proses istifadə edir. Bu, CPython-də GIL (Global Interpreter Lock) məhdudiyyətini aşır və CPU intensiv tapşırıqlar üçün uyğundur.
import multiprocessing import time def worker(num): """Bir iş""" time.sleep(1) print(f'İşçi {num} tamamlandı') if __name__ == '__main__': proseslər = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) proseslər.append(p) p.start() for p in proseslər: p.join() print("Bütün işçilər tamamlandı") -
Çox ipli (Multithreading): Bir proses daxilində bir neçə ip istifadə edir, ümumi ünvan sahəsini paylaşır. CPython-də GIL səbəbindən, iplar CPU-bound tapşırıqlar üçün paralel işləməz, amma I/O-bound tapşırıqlar üçün effektivdir.
import threading import time def worker(num): """Bir iş""" time.sleep(1) # I/O əməliyyatını simulyasiya edir print(f'İp {num} tamamlandı') ipler = [] for i in range(5): t = threading.Thread(target=worker, args=(i,)) ipler.append(t) t.start() for t in ipler: t.join() print("Bütün ipler tamamlandı") -
Asinxron proqramlaşdırma (Asyncio): Bir ip və hadisələr döngüsü (event loop) istifadə edir, vəzifələrin yerinə yetirilməsini idarə edir. Yüksək yüklü I/O-bound tətbiqlər və veb serverlər üçün uyğundur. I/O gözləyərkən yerinə yetirməyi bloklamır.
import asyncio import time async def worker(num): """Bir asinxron iş""" await asyncio.sleep(1) # Asinxron I/O gözləmə print(f'Asinxron 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("Bütün asinxron işçilər tamamlandı") if __name__ == '__main__': asyncio.run(main())
Yanaşma seçimi vəzifənin xarakterindən asılıdır:
| Yanaşma | CPU-bound vəzifələr | I/O-bound vəzifələr | GIL | Yaddaş istifadəsi |
|---|---|---|---|---|
| Multiprocessing | Əla | Yaxşı | Aşır | Böyük (öz prosesi) |
| Multithreading | Pis (GIL səbəbindən) | Əla | Bloklayır | Kiçik (ümumi proses) |
| Asinxron | Pis | Əla | Bloklamır | Kiçik (bir ip) |
Paralelizm, yarış şəraitlərinin və resursların diqqətlə idarə olunmasını tələb edir, bu da yarış şəraitləri və deadlock-lərin qarşısını almağa kömək edir.