Dasturlashda parallelizm nima?
sobes.tech AI
AIdan javob
Dasturlashda parallelizm bir yoki bir nechta vazifalarni bir vaqtning o'zida bajarilishi yoki bitta vaqtda bajarilayotgan ko'rinishidir, bu ilovalarining ishlashini va javob berish qobiliyatini oshiradi.
Bir nechta parallelizm turlari ajratiladi:
-
Ko'p protsessli (Multiprocessing): Bir nechta mustaqil jarayonlarni ishlatadi, har biri o'z manzil maydoniga ega. Bu CPython'dagi GIL (Global Interpreter Lock) cheklovini yengib o'tadi va CPU intensiv vazifalar uchun mos keladi.
import multiprocessing import time def worker(num): """Bir ish""" time.sleep(1) print(f'Ishchi {num} tugadi') 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("Barcha ishchilar tugadi") -
Ko'p ipli (Multithreading): Bir jarayon ichida bir nechta iplarni ishlatadi, umumiy manzil maydonini bo'lishadi. CPython'da GIL sababli, iplar CPU-bound vazifalar uchun parallel ishlamaydi, ammo I/O-bound vazifalar uchun samarali.
import threading import time def worker(num): """Bir ish""" time.sleep(1) # I/O operatsiyasini simulyatsiya qilish print(f'Ip {num} tugadi') 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("Barcha iplar tugadi") -
Asinxron dasturlash (Asyncio): Bir ip va voqealar tsikli (event loop) yordamida vazifalarni boshqaradi. Yuqori yuklangan I/O-bound ilovalar va veb-serverlar uchun mos. I/O kutayotgan paytda bajarilishni bloklamaydi.
import asyncio import time async def worker(num): """Bir asinxron ish""" await asyncio.sleep(1) # Asinxron I/O kutish print(f'Asinxron ishchi {num} tugadi') async def main(): tasks = [] for i in range(5): task = asyncio.create_task(worker(i)) tasks.append(task) await asyncio.gather(*tasks) print("Barcha asinxron ishlar tugadi") if __name__ == '__main__': asyncio.run(main())
Yondashuv tanlovi vazifaning tabiatiga bog'liq:
| Yondashuv | CPU-bound vazifalar | I/O-bound vazifalar | GIL | Xotira foydalanishi |
|---|---|---|---|---|
| Ko'p protsessli | A'lo | Yaxshi | Yengib o'tadi | Katta (o'z jarayoni) |
| Ko'p ipli | Yomon (GIL sababli) | A'lo | Bloklaydi | Kichik (umumiy jarayon) |
| Asinxron | Yomon | A'lo | Bloklamaydi | Kichik (bir ip) |
Parallelizm sinxronizatsiya va resurslarni ehtiyotkorlik bilan boshqarishni talab qiladi, shuningdek, shoshilinch holatlar va deadlocklarni oldini oladi.