Lygiagretusis programavimas: Skirtumas tarp puslapio versijų
Ištrintas turinys Pridėtas turinys
SNėra keitimo santraukos |
S robotas: brūkšneliai keičiami brūkšniais (pagal lietuvių kalbos rašybos normas) |
||
Eilutė 1:
{{Kompiuteriniai terminai}}
'''Lygiagretusis programavimas'''
Lygiagrečiojo programavimo taikymas prasmingas tik tada, jei darbai gali būti padalinami ir vykdomi vienu metu, jei darbai priklauso vienas nuo kito (turi būti vykdomi iš eilės), lygiagretusis programavimas nėra efektyvus.
;Lygiagrečiojo programavimo pagrindinės problemos: sinchronizacija
:apsikeitimas informacija tarp lygiagrečių procesų.
==Kritinės sekcijos==
Informacijos apsikeitimui naudojamos kritinės sekcijos
Neatsargiai naudojamos kritinės sekcijos gali sulėtinti sistemos darbą. Pagreitinti programą galima atsisakius perteklinių kritinių sekcijų, jas supaprastinus iki minimumo, kad joje procesas užtruktų tik tiek, kiek reikia informacijos apsikeitimui ir apsaugojimui.
Kritinių sekcijų apsaugai yra sukurta daug priemonių. Bene pirmoji sukurta
==Kritinių sekcijų pavyzdžiai==
Pateikiami keli pavyzdžiai [[Java (kalba)|Java kalba]]. Pirmame pavyzdyje kritinės sekcijos apsauga nenaudojama (rezultatas
package testas;
Eilutė 32:
public void run() {
pradzia = System.currentTimeMillis();
while (System.currentTimeMillis()
BendriDuomenys.keisti();
}
Eilutė 42:
public void run() {
pradzia = System.currentTimeMillis();
while (System.currentTimeMillis()
if (!BendriDuomenys.arNulis()) {
System.out.println("Ne nulis");
Eilutė 70:
== Užraktas ==
''Pagrindinis straipsnis
Minėtuose pavyzdžiuose kritinės sekcijos yra apsaugotos sinchronizavimo raktažodžiu. Toks apsaugos būdas labai paprastas, tačiau jis gali netikti jei reikia saugoti ne kodo sekciją nuo vykdymo, o duomenų struktūrą nuo lygiagretaus manipuliavimo įvairiomis kodo sekcijomis. Tuomet vartojamas užraktas, kuris paprastai būna susietas su tokia saugoma duomenų struktūra. Užraktai prireikus leidžia suteikti skaitymo leidimus, kurie vienu metu gali būti išduodami ir daugeliui gijų) ir rašymo leidimą (kuris vienu metu gali būti suteiktas tik vienai gijai ir tik tada, jei nėra išduotų skaitymo leidimų).
== Semaforas ==
''Pagrindinis straipsnis
Semaforai naudojami, kuomet pageidaujama, jog su tam tikra duomenų struktūra ar kompiuterio įrenginiu nedirbtų daugiau nei nurodytas ribotas skaičius lygiagrečių gijų.
Semaforas yra struktūra, turinti ją sukuriant nustatytą leidimų skaičių dirbti su saugoma duomenų struktūra ar vykdyti saugomą kodo sekciją. Kiekviena gija, prieš pradėdama darbą su saugoma sekcija, turi gauti iš semaforo leidimą (kviesdama semaforo metodą), o baigusi darbą su saugomu objektu
Jei semaforas turi tik vieną leidimą, jo darbas daug nesiskiria nuo užrakto. Tačiau, skirtingai nuo užraktų, semaforai paprastai leidžia grąžinti leidimą ir ne tai gijai, kuri jį pasiėmė. Kai kuriuose algoritmuose tai gali būti reikalinga, nors šiai galimybei reikalingi sinchronizavimo veiksmai gali sąlygoti lėtesnį darbą nei naudojant užraktus.
== Lakūs kintamieji ==
''Pagrindinis straipsnis
Kai kuriose sistemose yra efektyviau visus kiekvienos gijos naudojamus duomenis saugoti atskiroje, su ta gija susietoje atminties dalyje. Jei tie patys duomenys skaitomi bei keičiami ir iš kitos gijos, visų kopijų reikšmės automatiškai sulyginamos.
|