Middle+
Aké problémy poznáš súvisiace s paralelizáciou?
sobes.tech AI
Odpoveď od AI
- Podmienka preteku (Race condition): Viaceré vlákna/procesy súčasne pristupujú a menia zdieľané údaje, čo vedie k nepredvídateľným výsledkom.
- Deadlock (Zamrznutie): Dve alebo viac vlákien čakajú na zdroje, ktoré sú obsadené inými, čo spôsobí zablokovanie systému.
- Hladovanie (Starvation): Vlákno s nízkou prioritou nedostáva prístup ku zdrojom a čaká nekonečne.
- Náklady na synchronizáciu: Použitie zámkov a iných primitives synchronizácie vyžaduje čas a zdroje, znižujúc celkový výkon.
- Zložitosť ladenia: Ladenie paralelného kódu je ťažké kvôli nepredvídateľnému poradiu vykonávania vlákien a ťažkostiam s reprodukciou problémov.
- Nedeterminizmus: Výsledok behu programu sa môže líšiť pri každom spustení kvôli odlišnému poradí vykonávania vlákien.
- Škálovateľnosť: Neschopnosť škálovať výkon proporcionálne k počtu jadier kvôli obmedzeniam v algoritme alebo architektúre.
- Falošné zdieľanie cache (False sharing): Viaceré vlákna súčasne pristupujú k rôznym dátam, ktoré sa nachádzajú v rovnakej cache riadku, spôsobujúc neustále aktualizácie.
Príklad podmienky preteku:
class Counter {
private int count = 0;
public void increment() {
count++;
}
public int getCount() {
return count;
}
}
// Ak dve vlákna volajú increment() súčasne bez synchronizácie,
// konečná hodnota count môže byť menšia ako očakávaná.