Azərbaycan  AzərbaycanDeutschland  DeutschlandLietuva  LietuvaMalta  Maltaශ්‍රී ලංකාව  ශ්‍රී ලංකාවTürkmenistan  TürkmenistanTürkiyə  TürkiyəУкраина  Украина
Pagalba
www.datawiki.lt-lt.nina.az
  • Pradžia

Šiame straipsnyje naudojami diskutuotini terminai Daugiau apie kompiuterinius terminus skaitykite žodynėlyje Šiam straip

Lygiagretusis programavimas

  • Pagrindinis puslapis
  • Lygiagretusis programavimas
Lygiagretusis programavimas
www.datawiki.lt-lt.nina.azhttps://www.datawiki.lt-lt.nina.az
   Šiame straipsnyje naudojami diskutuotini terminai.
Daugiau apie kompiuterinius terminus skaitykite žodynėlyje.


   Šiam straipsniui ar jo daliai trūksta išnašų į patikimus šaltinius.
Jūs galite padėti Vikipedijai pridėdami tinkamas išnašas su šaltiniais.

Lygiagretusis programavimas – kompiuterių mokslo (informatikos) sritis, tirianti algoritmų lygiagretinimą. Lygiagretinimas – skirtingų operacijų vykdymo paskirstymas keliems procesoriams ar kompiuteriams. Pastarasis atvejis vadinamas paskirstytuoju skaičiavimu.

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 – užtikrinimas, kad darbai netrukdytų vienas kitam;
apsikeitimas informacija tarp lygiagrečių procesų.

Kritinės sekcijos

Informacijos apsikeitimui naudojamos kritinės sekcijos – apsaugotos kodo atkarpos, į kurias vienu metu gali patekti tik vienas vykdytojas (gija arba procesas). Kiti procesai, norintys atlikti šiuos veiksmus, yra pristabdomi. Baigus darbą kritinėje sekcijoje, vienas iš pristabdytų procesų yra pažadinamas ir tęsia darbą kritinėje sekcijoje. Šioje vietoje veiksmus gali atlikti tik vienas procesas vienu metu, o kiti procesai laukia ir tokiu būdu lėtina programos veikimą.

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 – semaforas.

Kritinių sekcijų pavyzdžiai

Pateikiami keli pavyzdžiai Java kalba. Pirmame pavyzdyje kritinės sekcijos apsauga nenaudojama (rezultatas – nenuspėjamas):

package testas; class BendriDuomenys { public static int skaicius = 0; public static void keisti() { skaicius++; skaicius--; } public static boolean arNulis() { return skaicius == 0; } } class Gija1 extends Thread { private long pradzia; public void run() { pradzia = System.currentTimeMillis(); while (System.currentTimeMillis() – pradzia < 1000) { BendriDuomenys.keisti(); } } } class Gija2 extends Thread { private long pradzia; public void run() { pradzia = System.currentTimeMillis(); while (System.currentTimeMillis() – pradzia < 1000) { if (!BendriDuomenys.arNulis()) { System.out.println(„Ne nulis“); } } } } public class Testas { public static void main(String[] args) { Gija1 gija1 = new Gija1(); Gija2 gija2 = new Gija2(); gija1.start(); gija2.start(); } } 

Šiek tiek pakoregavus, gaunamas kodas, kuriame naudojama kritinės sekcijos apsauga:

... public synchronized static void keisti() ... public synchronized static boolean arNulis() ... 

Šiuo atveju monitorius apsaugo duomenis, kad jie nebūtų keičiami kelių gijų vienu metu, taigi rezultatai tampa nuspėjami. Nesunkiai galime apskaičiuoti, kiek kartų kiekvieną kartą bus kviečiami metodai (naudojant monitorių ir nenaudojant). Tačiau, kaip minėta, kritinių sekcijų apsauga yra labai brangi laiko atžvilgiu. Įprastame asmeniniame kompiuteryje su Windows XP operacine sistema ir Sun kompanijos JRE 1.5 antrasis pavyzdys su monitoriais veikė 3 kartus lėčiau nei pirmasis be monitorių, tačiau priklausomai nuo JVM (Java kalbos Virtualios Mašinos) realizacijos ir operacinės sistemos teikiamų galimybių rezultatai gali skirtis.

Užraktas

Pagrindinis straipsnis – Užraktas (programavimas)

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 – Semaforas (programavimas)

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 – leidimą grąžinti. Jei semafore daugiau šiuo metu leidimų nebėra (jo likusių leidimų skaitiklis lygus nuliui), leidimo prašanti gija blokuojama, kol kokia nors kita gija anksčiau pasiimtą leidimą grąžins.

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 – Lakus kintamasis

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.

Jei algoritmas reikalauja, jog kintamojo reikšmė skirtingose gijose niekada net ir trumpam netaptų skirtinga, toks kintamasis vadinamas lakiu (angl. volatile). Lakūs kintamieji deklaruojami specialiu raktažodžiu (java tas raktažodis yra „volatile“).

Nuorodos

  • Lygiagretaus programavimo mitai

Autorius: www.NiNa.Az

Išleidimo data: 11 Lie, 2025 / 04:58

vikipedija, wiki, lietuvos, knyga, knygos, biblioteka, straipsnis, skaityti, atsisiųsti, nemokamai atsisiųsti, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, pictu, mobilusis, porn, telefonas, android, iOS, apple, mobile telefl, samsung, iPhone, xiomi, xiaomi, redmi, pornografija, honor, oppo, Nokia, Sonya, mi, pc, web, kompiuteris, Informacija apie Lygiagretusis programavimas, Kas yra Lygiagretusis programavimas? Ką reiškia Lygiagretusis programavimas?

Siame straipsnyje naudojami diskutuotini terminai Daugiau apie kompiuterinius terminus skaitykite zodynelyje Siam straipsniui ar jo daliai truksta isnasu į patikimus saltinius Jus galite padeti Vikipedijai pridedami tinkamas isnasas su saltiniais Lygiagretusis programavimas kompiuteriu mokslo informatikos sritis tirianti algoritmu lygiagretinima Lygiagretinimas skirtingu operaciju vykdymo paskirstymas keliems procesoriams ar kompiuteriams Pastarasis atvejis vadinamas paskirstytuoju skaiciavimu Lygiagreciojo programavimo taikymas prasmingas tik tada jei darbai gali buti padalinami ir vykdomi vienu metu jei darbai priklauso vienas nuo kito turi buti vykdomi is eiles lygiagretusis programavimas nera efektyvus Lygiagreciojo programavimo pagrindines problemos sinchronizacija uztikrinimas kad darbai netrukdytu vienas kitam apsikeitimas informacija tarp lygiagreciu procesu Kritines sekcijosInformacijos apsikeitimui naudojamos kritines sekcijos apsaugotos kodo atkarpos į kurias vienu metu gali patekti tik vienas vykdytojas gija arba procesas Kiti procesai norintys atlikti siuos veiksmus yra pristabdomi Baigus darba kritineje sekcijoje vienas is pristabdytu procesu yra pazadinamas ir tesia darba kritineje sekcijoje Sioje vietoje veiksmus gali atlikti tik vienas procesas vienu metu o kiti procesai laukia ir tokiu budu letina programos veikima Neatsargiai naudojamos kritines sekcijos gali suletinti sistemos darba Pagreitinti programa galima atsisakius pertekliniu kritiniu sekciju jas supaprastinus iki minimumo kad joje procesas uztruktu tik tiek kiek reikia informacijos apsikeitimui ir apsaugojimui Kritiniu sekciju apsaugai yra sukurta daug priemoniu Bene pirmoji sukurta semaforas Kritiniu sekciju pavyzdziaiPateikiami keli pavyzdziai Java kalba Pirmame pavyzdyje kritines sekcijos apsauga nenaudojama rezultatas nenuspejamas package testas class BendriDuomenys public static int skaicius 0 public static void keisti skaicius skaicius public static boolean arNulis return skaicius 0 class Gija1 extends Thread private long pradzia public void run pradzia System currentTimeMillis while System currentTimeMillis pradzia lt 1000 BendriDuomenys keisti class Gija2 extends Thread private long pradzia public void run pradzia System currentTimeMillis while System currentTimeMillis pradzia lt 1000 if BendriDuomenys arNulis System out println Ne nulis public class Testas public static void main String args Gija1 gija1 new Gija1 Gija2 gija2 new Gija2 gija1 start gija2 start Siek tiek pakoregavus gaunamas kodas kuriame naudojama kritines sekcijos apsauga public synchronized static void keisti public synchronized static boolean arNulis Siuo atveju monitorius apsaugo duomenis kad jie nebutu keiciami keliu giju vienu metu taigi rezultatai tampa nuspejami Nesunkiai galime apskaiciuoti kiek kartu kiekviena karta bus kvieciami metodai naudojant monitoriu ir nenaudojant Taciau kaip mineta kritiniu sekciju apsauga yra labai brangi laiko atzvilgiu Įprastame asmeniniame kompiuteryje su Windows XP operacine sistema ir Sun kompanijos JRE 1 5 antrasis pavyzdys su monitoriais veike 3 kartus leciau nei pirmasis be monitoriu taciau priklausomai nuo JVM Java kalbos Virtualios Masinos realizacijos ir operacines sistemos teikiamu galimybiu rezultatai gali skirtis UzraktasPagrindinis straipsnis Uzraktas programavimas Minetuose pavyzdziuose kritines sekcijos yra apsaugotos sinchronizavimo raktazodziu Toks apsaugos budas labai paprastas taciau jis gali netikti jei reikia saugoti ne kodo sekcija nuo vykdymo o duomenu struktura nuo lygiagretaus manipuliavimo įvairiomis kodo sekcijomis Tuomet vartojamas uzraktas kuris paprastai buna susietas su tokia saugoma duomenu struktura Uzraktai prireikus leidzia suteikti skaitymo leidimus kurie vienu metu gali buti isduodami ir daugeliui giju ir rasymo leidima kuris vienu metu gali buti suteiktas tik vienai gijai ir tik tada jei nera isduotu skaitymo leidimu SemaforasPagrindinis straipsnis Semaforas programavimas Semaforai naudojami kuomet pageidaujama jog su tam tikra duomenu struktura ar kompiuterio įrenginiu nedirbtu daugiau nei nurodytas ribotas skaicius lygiagreciu giju Semaforas yra struktura turinti ja sukuriant nustatyta leidimu skaiciu dirbti su saugoma duomenu struktura ar vykdyti saugoma kodo sekcija Kiekviena gija pries pradedama darba su saugoma sekcija turi gauti is semaforo leidima kviesdama semaforo metoda o baigusi darba su saugomu objektu leidima grazinti Jei semafore daugiau siuo metu leidimu nebera jo likusiu leidimu skaitiklis lygus nuliui leidimo prasanti gija blokuojama kol kokia nors kita gija anksciau pasiimta leidima grazins Jei semaforas turi tik viena leidima jo darbas daug nesiskiria nuo uzrakto Taciau skirtingai nuo uzraktu semaforai paprastai leidzia grazinti leidima ir ne tai gijai kuri jį pasieme Kai kuriuose algoritmuose tai gali buti reikalinga nors siai galimybei reikalingi sinchronizavimo veiksmai gali salygoti letesnį darba nei naudojant uzraktus Lakus kintamiejiPagrindinis straipsnis Lakus kintamasis Kai kuriose sistemose yra efektyviau visus kiekvienos gijos naudojamus duomenis saugoti atskiroje su ta gija susietoje atminties dalyje Jei tie patys duomenys skaitomi bei keiciami ir is kitos gijos visu kopiju reiksmes automatiskai sulyginamos Jei algoritmas reikalauja jog kintamojo reiksme skirtingose gijose niekada net ir trumpam netaptu skirtinga toks kintamasis vadinamas lakiu angl volatile Lakus kintamieji deklaruojami specialiu raktazodziu java tas raktazodis yra volatile NuorodosLygiagretaus programavimo mitai

Naujausi straipsniai
  • Liepa 11, 2025

    Pradžapatis

  • Liepa 11, 2025

    Plokščioji kirmėlė

  • Liepa 12, 2025

    Plocko gubernija

  • Liepa 12, 2025

    Pleščejevo ežero nacionalinis parkas

  • Liepa 10, 2025

    Pleščejevo ežeras

www.NiNa.Az - Studija

    Susisiekite
    Kalbos
    Susisiekite su mumis
    DMCA Sitemap
    © 2019 nina.az - Visos teisės saugomos.
    Autorių teisės: Dadash Mammadov
    Nemokama svetainė, kurioje galima dalytis duomenimis ir failais iš viso pasaulio.
    Viršuje