109,855 matches
-
Câteodată însă, aceste porțiuni de cod care constituie corpul threadurilor, nu sunt complet independente și în anumite momente ale execuției, se poate întâmpla că un thread să trebuiască să aștepte execuția unor instrucțiuni din alt thread, pentru a putea continua execuția propriilor instrucțiuni. Această tehnică prin care un thread așteaptă execuția altor threaduri înainte de a continua propria execuție, se numește sincronizarea threadurilor. Threadurile sunt diferite față de clasicele procese gestionte de sistemele de operare ce suporta multitasking, în principal prin faptul că
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
nu sunt complet independente și în anumite momente ale execuției, se poate întâmpla că un thread să trebuiască să aștepte execuția unor instrucțiuni din alt thread, pentru a putea continua execuția propriilor instrucțiuni. Această tehnică prin care un thread așteaptă execuția altor threaduri înainte de a continua propria execuție, se numește sincronizarea threadurilor. Threadurile sunt diferite față de clasicele procese gestionte de sistemele de operare ce suporta multitasking, în principal prin faptul că, spre deosebire de procese, toate threadurile asociate unui proces folosesc același spațiu
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
momente ale execuției, se poate întâmpla că un thread să trebuiască să aștepte execuția unor instrucțiuni din alt thread, pentru a putea continua execuția propriilor instrucțiuni. Această tehnică prin care un thread așteaptă execuția altor threaduri înainte de a continua propria execuție, se numește sincronizarea threadurilor. Threadurile sunt diferite față de clasicele procese gestionte de sistemele de operare ce suporta multitasking, în principal prin faptul că, spre deosebire de procese, toate threadurile asociate unui proces folosesc același spațiu de adresare. Procesele sunt în general independente
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
împart același spațiu de adresare, threadurile pot comunica prin modificarea unor variabile asociate procesului și se pot sincroniză prin mecanismele proprii. În general este mult mai simplu și rapid schimbul de informații între threaduri decât între procese. Atât firele de execuție, cât și procesele au "stări" ce pot fi "sincronizate" pentru a evita problemele ce pot apărea datorită faptului că împart diverse resurse . În general, fiecare fir de execuție are o sarcină specifică și este programat astfel încât să optimizeze utilizarea procesorului
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
rapid schimbul de informații între threaduri decât între procese. Atât firele de execuție, cât și procesele au "stări" ce pot fi "sincronizate" pentru a evita problemele ce pot apărea datorită faptului că împart diverse resurse . În general, fiecare fir de execuție are o sarcină specifică și este programat astfel încât să optimizeze utilizarea procesorului. Principalele stări ale unui fir de execuie sunt: Activ, Pregătit și Blocat. Comparativ cu acestea, procesele au și starea specifică Repaus (Sleep). Dacă un proces este eliminat din
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
este programat astfel încât să optimizeze utilizarea procesorului. Principalele stări ale unui fir de execuie sunt: Activ, Pregătit și Blocat. Comparativ cu acestea, procesele au și starea specifică Repaus (Sleep). Dacă un proces este eliminat din memoria RAM, toate firele de execuție ale acestuia vor fi oprite, deoarece se aflau în acelși spațiu de memorie că și procesul respectiv. La alegere, în locul blocrii/deblocării threadurilor, acestea pot primi priorități de execuție, însă această metodă este mai ineficientă, deoarece procesorul tot va comuta
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
Dacă un proces este eliminat din memoria RAM, toate firele de execuție ale acestuia vor fi oprite, deoarece se aflau în acelși spațiu de memorie că și procesul respectiv. La alegere, în locul blocrii/deblocării threadurilor, acestea pot primi priorități de execuție, însă această metodă este mai ineficientă, deoarece procesorul tot va comuta de la un thread la altul, operație ce va ocupa cicli de procesor. Cu varianta din urmă însă, se vor evita mai usor erori de programare prin care două sau
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
din familia Windows. Acestea sunt gestionate de codul aplicației și trecerea de la un thread la altul nu necesită apeluri la sistemul de operare sau întreruperi ale kernelului. Defapt, kernelul gestionează aceste threaduri că procese diferite cu un singur fir de execuție. Avantaje: Dezavantaje: În acest caz, nucleul sistemului de operare gestionează funcționarea firelor de execuție și, în locul unui tabel cu firele de execuție pentru fiecare proces în parte, sistemul deține un tabel ce păstrează toate threadurile din sistem. Avantaje: Dezavantaje: Standardul
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
la altul nu necesită apeluri la sistemul de operare sau întreruperi ale kernelului. Defapt, kernelul gestionează aceste threaduri că procese diferite cu un singur fir de execuție. Avantaje: Dezavantaje: În acest caz, nucleul sistemului de operare gestionează funcționarea firelor de execuție și, în locul unui tabel cu firele de execuție pentru fiecare proces în parte, sistemul deține un tabel ce păstrează toate threadurile din sistem. Avantaje: Dezavantaje: Standardul POSIX 1003.1-2001 definește un APO utilizat în scrierea programelor multithreaded. Această interfață este
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
operare sau întreruperi ale kernelului. Defapt, kernelul gestionează aceste threaduri că procese diferite cu un singur fir de execuție. Avantaje: Dezavantaje: În acest caz, nucleul sistemului de operare gestionează funcționarea firelor de execuție și, în locul unui tabel cu firele de execuție pentru fiecare proces în parte, sistemul deține un tabel ce păstrează toate threadurile din sistem. Avantaje: Dezavantaje: Standardul POSIX 1003.1-2001 definește un APO utilizat în scrierea programelor multithreaded. Această interfață este cunoscută și sub numele de codice 1. Un număr
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
Dezavantaje: Standardul POSIX 1003.1-2001 definește un APO utilizat în scrierea programelor multithreaded. Această interfață este cunoscută și sub numele de codice 1. Un număr mare de sisteme de operare moderne includ o bibliotecă pentru programerea cu mai multe fire de execuție: Solaris (UI) threads, Win32 threads, DCE threads, DECthreads sau alte variații ale standardului pthreads. Există o tendință de a adopta chiar API-ul standard pthreads, pentru a ușura muncă dezvoltatorilor în cazul migrării de la o platformă la alta. Codul iese
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
DECthreads sau alte variații ale standardului pthreads. Există o tendință de a adopta chiar API-ul standard pthreads, pentru a ușura muncă dezvoltatorilor în cazul migrării de la o platformă la alta. Codul iese din proces și distruge toate firele de execuție. Dacă threadul curent este ultimul thread în execuție, atunci și procesul va fi oprit. În limbajul Java, threadurile sunt un element esențial pentru execuția paralelă, întrucât o aplicație ce rulează în mașină virtuală Java reprezintă un singur proces. Clasa java
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
o tendință de a adopta chiar API-ul standard pthreads, pentru a ușura muncă dezvoltatorilor în cazul migrării de la o platformă la alta. Codul iese din proces și distruge toate firele de execuție. Dacă threadul curent este ultimul thread în execuție, atunci și procesul va fi oprit. În limbajul Java, threadurile sunt un element esențial pentru execuția paralelă, întrucât o aplicație ce rulează în mașină virtuală Java reprezintă un singur proces. Clasa java.lang.Thread poate fi utilizată pentru implementarea unui
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
cazul migrării de la o platformă la alta. Codul iese din proces și distruge toate firele de execuție. Dacă threadul curent este ultimul thread în execuție, atunci și procesul va fi oprit. În limbajul Java, threadurile sunt un element esențial pentru execuția paralelă, întrucât o aplicație ce rulează în mașină virtuală Java reprezintă un singur proces. Clasa java.lang.Thread poate fi utilizată pentru implementarea unui fir de execuție separat. Acțiunile ce se execută pe thread se pot defini în metodă run
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
procesul va fi oprit. În limbajul Java, threadurile sunt un element esențial pentru execuția paralelă, întrucât o aplicație ce rulează în mașină virtuală Java reprezintă un singur proces. Clasa java.lang.Thread poate fi utilizată pentru implementarea unui fir de execuție separat. Acțiunile ce se execută pe thread se pot defini în metodă run() a acestei clase (sau în cea a unui obiect ce implementează java.lang.Runnable și care este păsat ca argument constructorului clasei java.lang.Thread). Firul de
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
separat. Acțiunile ce se execută pe thread se pot defini în metodă run() a acestei clase (sau în cea a unui obiect ce implementează java.lang.Runnable și care este păsat ca argument constructorului clasei java.lang.Thread). Firul de execuție se pornește prin apelul metodei start() a acestuia.
Fir de execuție () [Corola-website/Science/322794_a_324123]
-
modul de distribuire a task-urilor procesoarelor. Performanța unui algoritm de calcul paralel depinde de granularitate. Aceasta se referă la mărimea task-ului în comparație cu timpul necesar comunicației și sincronizării datelor. Dacă timpul necesar comunicației și sincronizării este mai mare decât timpul de execuție al task-ului atunci granularitatea este mică. O soluție este partiționarea programului în taskuri de dimensiuni mai mari cu o granularitate grosieră. Dezavantajul acestei metode este reducerea gradului de paralelism. Îmbunătățirea performanțelor unui algoritm de calcul paralel se face prin găsirea
Algoritmi de calcul paralel () [Corola-website/Science/322791_a_324120]
-
acestora și menținerea la minimu necesar a consumului suplimentar de resurse. Cea mai bună granularitate este cea obținută prin adaptarea algoritmului pe platforma hardware pe care rulează. În majoritatea cazurilor overhead-ul asociat comunicațiilor și sincronizării este mare în comparație cu timpul de execuție caz în care se preferă o granularitate grosieră. Partiționarea unui algoritm se poate face în două moduri: Alocarea reprezintă distribuirea de taskuri procesoarelor. Planificarea ca și în cazul partiționării poate fi statică sau dinamică. În cazul alocării statice sarcinile și
Algoritmi de calcul paralel () [Corola-website/Science/322791_a_324120]
-
care se preferă o granularitate grosieră. Partiționarea unui algoritm se poate face în două moduri: Alocarea reprezintă distribuirea de taskuri procesoarelor. Planificarea ca și în cazul partiționării poate fi statică sau dinamică. În cazul alocării statice sarcinile și ordinea de execuție sunt cunoscute înainte de execuție. Algoritmii de calcul paralel ce folosesc planificarea statică necesită un volum mic de comunicare între procese potrivită pentru cazurile când costurile de comunicație este mare. În cazul planificării dinamice alocarea sarcinilor este făcută la rulare. Această
Algoritmi de calcul paralel () [Corola-website/Science/322791_a_324120]
-
granularitate grosieră. Partiționarea unui algoritm se poate face în două moduri: Alocarea reprezintă distribuirea de taskuri procesoarelor. Planificarea ca și în cazul partiționării poate fi statică sau dinamică. În cazul alocării statice sarcinile și ordinea de execuție sunt cunoscute înainte de execuție. Algoritmii de calcul paralel ce folosesc planificarea statică necesită un volum mic de comunicare între procese potrivită pentru cazurile când costurile de comunicație este mare. În cazul planificării dinamice alocarea sarcinilor este făcută la rulare. Această tehnică permite distribuirea uniformă
Algoritmi de calcul paralel () [Corola-website/Science/322791_a_324120]
-
un șir de caractere a cărui mărime este cunoscută prin parametrul constructorului clasei. Constructorul permite că utilizatorul să amâne alocarea memoriei prin transmiterea argumentului de valoare zero. Acest principiu de design este important, deoarece, cu toate că operația în sine este opționala, execuția constructorului nu este. Alt argument pentru a da mărimii o valoare implicită este pentru a oferi posibilitatea creării unui șir de obiecte tip mem. Destructorul clasei mem nu are nici o particularitate. Chiar dacă utilizatorul nu a alocat memorie la apelarea constructorului
RAII () [Corola-website/Science/322811_a_324140]
-
Aceasta este abordarea de bază și funcționează foarte bine în aplicații mici, pentru care nu se merită scris un sitem RÂII sau chiar folositrea smart pointerilor. Însă, atunci când codul se extinde, obiectele se înmulțesc la număr și/sau se dorește execuție de tip multithreaded, redundanta codului va crește exponanțial și la fel și numărul erorilor. Astfel, citând cuvintele lui Stroustrup: "Aplicând această tehnică în mod recursiv și în cât mai multe locuri posibil în cadrul aplicatei tale, alocările și dealocările vor dispărea
RAII () [Corola-website/Science/322811_a_324140]
-
cu legile pentru Actori. Modelul Actor este despre semantica transmiterii mesajelor. Primele programe concurente au fost interrupt handlers. În timpul operării normale, un calculator trebuie să primească informație din exterior (caractere de la tastatură, pachete din rețea, "etc".). Și când informația ajunge, execuția calculatorului este "întreruptă" și codul special chemat handler de întrerupere este rulat pentru a așeza informația într-un buffer de unde poate fi retrasă mai târziu. În anii 1960, întreruperile au început să fie folosite să simuleze execuția concurentă a mai
Modelul Actor () [Corola-website/Science/322835_a_324164]
-
când informația ajunge, execuția calculatorului este "întreruptă" și codul special chemat handler de întrerupere este rulat pentru a așeza informația într-un buffer de unde poate fi retrasă mai târziu. În anii 1960, întreruperile au început să fie folosite să simuleze execuția concurentă a mai multor programe pe un singur procesor. Având concurență cu memorie partajată, s-a născut problema controlului de concurență. Original, această problemă era privită ca fiind una dintre excusiunile mutuale pe un singur calculator. Edsger Dijkstra a dezvoltat
Modelul Actor () [Corola-website/Science/322835_a_324164]
-
și hidrocentrala Gureni de pe Râul Mare prima lucrare ce trebuia promovată pentru amenajarea hidroenergetica a barajului Râul Mare. De asemenea, a fost direct implicat în elaborarea primului plan de amenajare hidroelectrica a fluviului Dunărea. Printre primele amenajări hidroenergetice a caror execuție a fost promovată imediat a fost centrală hidroelectică Sadu V (Sibiu), de pe râul Sadu. Pe lângă funcția de șef de proiect al lucrării, Aristide Teodorescu a îndeplinit și sarcina de inginer îndrumător a execuției, coordonând grupul de proiectanți de pe șantier. În
Aristide Teodorescu () [Corola-website/Science/322002_a_323331]