Kas ir paralēlisms programmēšanā?
sobes.tech AI
Atbilde no AI
Paralēlisms programmēšanā ir vairākas uzdevumu izpilde vienlaikus vai šķietami vienlaikus, kas ļauj uzlabot lietojumprogrammu veiktspēju un reakcijas ātrumu.
Ir vairāki paralēlismu veidi:
-
Daudzprocesoru (Multiprocessing): Izmanto vairākus neatkarīgus procesus, katru ar savu adreses telpu. Tas pārvar GIL (Global Interpreter Lock) ierobežojumu CPython un ir piemērots CPU intensīvām uzdevumiem.
import multiprocessing import time def worker(num): """Kāda darba""" time.sleep(1) print(f'Darbinieks {num} pabeidza') if __name__ == '__main__': procesi = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) procesi.append(p) p.start() for p in procesi: p.join() print("Visi darbinieki pabeidza") -
Daudzšlīnu (Multithreading): Izmanto vairākus pavedienus vienā procesā, kas dalās kopīgā adreses telpā. Dēļ GIL CPython, pavedieni netiek izpildīti paralēli vairākos kodola darbiniekiem CPU-bound uzdevumiem, bet ir efektīvi I/O-bound uzdevumiem.
import threading import time def worker(num): """Kāda darba""" time.sleep(1) # I/O operācijas imitācija print(f'Vītnes {num} pabeidza') vītnes = [] for i in range(5): t = threading.Thread(target=worker, args=(i,)) vītnes.append(t) t.start() for t in vītnes: t.join() print("Visas vītnes pabeidza") -
Asinhronā programmēšana (Asyncio): Izmanto vienu pavedienu un notikumu cilpu (event loop) uzdevumu pārvaldībai. Piemērots augstas slodzes I/O-bound lietojumprogrammām un tīmekļa serveriem. Neaizkavē izpildi gaidot I/O.
import asyncio import time async def worker(num): """Kāda asinhroniska darba""" await asyncio.sleep(1) # Asinhrona gaidīšana I/O print(f'Async worker {num} pabeidza') async def main(): uzdevumi = [] for i in range(5): uzdevums = asyncio.create_task(worker(i)) uzdevumi.append(uzdevums) await asyncio.gather(*uzdevumi) print("Visi asinhroniski darbinieki pabeidza") if __name__ == '__main__': asyncio.run(main())
Izvēle ir atkarīga no uzdevuma rakstura:
| Pieeja | CPU-uzņēmīgas uzdevumi | I/O-uzņēmīgas uzdevumi | GIL | Atmiņas izmantošana |
|---|---|---|---|---|
| Daudzprocesoru | Izcili | Labi | Pārliecinās | Liels (sava procesa) |
| Daudzšlīnu | Slikti (dēļ GIL) | Izcili | Bloķē | Mazs (kopīgs process) |
| Asinhroni | Slikti | Izcili | Neaizkavē | Mazs (viens pavedienis) |
Paralēlisms prasa uzmanīgu sinhronizācijas un resursu pārvaldību, lai izvairītos no sacensības stāvokļiem (race conditions) un mirstošajām vietām (deadlocks).