curs 3vniculescu/didactic/ppd/c3.pdfvarianta: masina vectoriala (un singur procesor cu unitati...

60
Curs 3 Programare Paralela si Distribuita Sisteme si Modele Paralelism implicit versus paralelism explicit Procese versus Fire de executie Thread- safety Curs 3 - PPD - 1

Upload: others

Post on 02-Jan-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Curs 3 Programare Paralela si Distribuita

Sisteme si Modele

Paralelism implicit versus paralelism explicit

Procese versus Fire de executie

Thread- safety

Curs 3 - PPD - 1

Page 2: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Distributed systems(hardware and software)- characteristics

• Scalability:

1. is the ability of a system, network, or process, to handle a growing amount of work in a capable manner or

2. its ability of a system, network, or process to been enlarged to accommodate the computational demand

• Performance: is characterized by the amount of useful work accomplished by a computer system compared to the time and resources used

• Latency: is the time between when something happened and the time it has an impact or becomes visible.

• Availability: the proportion of time a system is in a functioning condition; if a user cannot access the system, it is said to be unavailable.

• Fault tolerance: ability of a system to behave in a well-defined manner once faults occur

Curs 3 - PPD - 2

Page 3: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Hardware: vertical scalability vs. horizontal scalability

• Scaling vertically: upgrading the hardware of a single computer

• Scaling horizontally: adding more computers/resources

Curs 3 - PPD - 3

Page 4: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Hardware: FT and LL

• Fault Tolerance —

– a cluster of ten machines across two data centers more fault-tolerant than a single machine.

• Low Latency —

– The time for a network packet to travel the world is physically bounded by the speed of light.

Curs 3 - PPD - 4

Page 5: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Programming models

• Bridge the gap between an underlying runtime/architecture and the supporting levels of software available

• Typically focused on achieving increased developer productivity

• Abstractions make things more manageable by removing real-world aspects that are not relevant to solving a problem.

• Models describe the key properties of a system in a precise manner.

• A good abstraction makes working with a system easier to understand, while capturing the factors that are relevant for a particular purpose.

Curs 3 - PPD - 5

Page 6: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Distributed systems: app types

Curs 3 - PPD - 6

Example: massive datasets that need to be analysed Characteristic: performance

Example: - popular multiplayer games Characteristic: Lots of frequently changing data

Page 7: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

7

Paralelism implicit SAU explicit

• Implicit parallelism

Programatorul nu specifica explicit paralelismul, lasa compilatorul si sistemul de suport al executiei (run-time support system)

sa paralelizeze automat.

• Explicit Parallelism

Programatorul specifica explicit paralelismul in codul sursa prin constructii speciale de limbaj, sau prin directive complexe sau prin apeluri de biblioteci.

Curs 3 - PPD -

Page 8: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

8

Modele de programare paralele Implicite

Implicit Parallelism: Parallelizing Compilers

• Automatic parallelization of sequential programs

• Dependency Analysis

• Data dependency

• Control dependency

Se poate obtine paralelizare dar nu completa si impune analize foarte dificile!

- Anumite instructiuni sunt mai simplu de paralelizat – exemplu for loops – verif dependente!!

Exemplificare simpla:

JIT(Just In Time) compilation can choose SSE2 vector CPU instructions when it detects that the CPU supports them

Curs 3 - PPD -

Page 9: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

9

Modele de programare paralela Explicita

Cele mai folosite:

• Shared-variable model

• Message-passing model

• Data-parallel model

Curs 3 - PPD -

Page 10: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

10

Analiza generala a caracteristicilor

Curs 3 - PPD -

Page 11: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Legatura Modele si Arhitecturi

Exemplificare pe problema concreta:

Suma de numere

Curs 3 - PPD - 11

Page 12: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Exemplu de aplicatie paralela: calcularea sumei Solutia generala: n/p operatii p procesoare (procese). Se disting doua seturi de date: -partajate: valorile A[i] si suma finala; -private: evalurile individuale de functii si sumele partiale

1

0

])[(n

i

iAf

Curs 3 - PPD - 12

Page 13: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

1) Model de programare: spatiu partajat de adrese. Programul = colectie de fire de executie, fiecare avand un set de variabile private, iar impreuna partajeaza un alt set de variabile globale/partajate. Comunicatia dintre firele de executie: prin citirea/scrierea variabilelor partajate. Coordonarea firelor de executie prin operatii de sincronizare: indicatori (flags), lacate (locks), semafoare, monitoare.

Curs 3 - PPD - 13

Page 14: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Masina paralela corespunzatoare modelului 1: masina cu memorie partajata (sistemele multiprocesor, sistemele multiprocesor simetrice sau SMP-Symmetric Multiprocessors). Exemple: sisteme de la Sun, DEC, Intel (Millennium), SGI Origin.

Curs 3 - PPD - 14

Page 15: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Variante ale acestui model:

a) masina cu memorie partajata distribuita (logic partajata, dar fizic distribuita). Exemplu: SGI Origin (scalabila la cateva sute de procesoare).

b) masina cu spatiu partajat de adrese (memoriile cache inlocuite cu memorii locale). Exemplu: Cray T3E.

Curs 3 - PPD - 15

Page 16: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

?

O solutie simplificata (2 threaduri) pentru rezolvarea problemei:

?

Curs 3 - PPD - 16

Page 17: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Este necesara sincronizarea threadurilor pentru accesul la variabilele partajate ! Exemplu: prin excludere mutuala, folosind operatia de blocare(lock):

Curs 3 - PPD - 17

Page 18: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

2) Modelul de programare: transfer de mesaje. Programul = colectie de procese, fiecare cu propriul thread de control si spatiu local de adrese, variabile locale, variabile statice, blocuri comune. Comunicatia dintre procese: prin transfer explicit de date (perechi de operatii corespunzatoare send si receive la procesele sursa si respectiv destinatie). Datele partajate din punct de vedere logic sunt partitionate intre toate procesele. => asemanare cu programarea distribuita!

Exista biblioteci standard (exemplu: MPI si PVM). Curs 3 - PPD - 18

Page 19: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Masina corespunzatoare modelului 2 este multicalculatorul (multistations) (sistem cu memorie distribuita):

Exemple: Cray T3E (poate fi incadrat si in aceasta categorie), IBM SP2, NOW, Millenium.

Curs 3 - PPD - 19

Page 20: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

O posibila solutie a problemei in cadrul modelului in transfer de mesaje (simplificare => suma se calculeaza : s = f(A[1]) + f(A[2]) ):

sau:

Procesor 1 Procesor 2 xlocal = f(A[1]) xlocal = f(A[2]) send xlocal, proc2 send xlocal, proc1 receive xremote, proc2 receive xremote, proc1 s = xlocal + xremote s = xlocal + xremote

Procesor 1 Procesor 2 xlocal = f(A[1]) xlocal = f(A[2]) send xlocal, proc2 receive xremote, proc1 receive xremote, proc2 send xlocal, proc1 s = xlocal + xremote s = xlocal + xremote

Curs 3 - PPD - 20

Deadlock?

Page 21: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

3) Modelul de programare: paralelism al datelor. Thread singular secvential de control controleaza un set de operatii paralele aplicate intregii structuri de date, sau numai unui singur subset.

Comunicatia: implicita, in modul de deplasare a datelor. Eficienta numai pentru anumite probleme (exemplu: prelucrari de tablouri)!

Curs 3 - PPD - 21

map + reduce

Page 22: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Masina corespunzatoare modelului 3: sistem SIMD - Single Instruction Multiple Data (numar mare de procesoare elementare comandate de un singur procesor de control, executand aceeasi instructiune, posibil anumite procesoare inactive la anumite momente de timp - la executia anumitor instructiuni).

Exemple: CM2, MASPAR, sistemele sistolice VLSI

Varianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp).

Curs 3 - PPD - 22

Page 23: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

4) Modelul 4 de masina: cluster de SMP-uri sau CLUMP (mai multe SMP-uri conectate intr-o retea). Fiecare SMP: sistem cu memorie partajata! Comunicatia intre SMP-uri: prin transfer de mesaje. Exemple: Millennium, IBM SPx, ASCI Red (Intel). Model de programare: - se poate utiliza transfer de mesaje, chiar in interiorul SMP-urilor! - Varianta hibrida!

Curs 3 - PPD - 23

Page 24: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Curs 3 - PPD - 24

Procese versus Fire de executie

Page 25: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Multiprocessing -> Paralelism

• Multicore processors

• Se folosesc mai multe unitati de procesare

=>Procesele se pot executa in acelasi timp

Curs 3 - PPD - 25

Page 26: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Multitasking-> Concurenta

• Sistemul de operare schimba executia intre diferite taskuri • Resursa comuna = CPU

• Interleaving – sunt mai multe taskuri active, dar doar unul se executa la un moment dat

• Multitasking: – SO ruleaza executii intretesute

Curs 3 - PPD - 26

Page 27: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Proces

• Un program (secvential) = un set de instructiuni

(in paradigma programarii imperative)

• Un proces = o instanta a unui program care se executa

Curs 3 - PPD - 27

Page 28: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Procese in cadrul sistemelor de operare

• Structura unui proces

– Identificator de proces (ID)

– Starea procesului (activitatea curenta)

– Contextul procesului (valori registrii, program counter)

– Memorie (codul program, date globale/statice, stiva si heap)

Curs 3 - PPD - 28

Page 29: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Scheduler

• Un program care controleaza executia proceselor

– Seteaza starile procesului

• new

• running

• blocked (nu poate fi selectat pt executie; este nevoie de un event extern pt a iesi din aceasta stare)

• ready

• terminated

Curs 3 - PPD - 29

Page 30: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Context switch

• Atunci cand scheduler-ul schimba procesul executat de o unitate de procesare

• Actiuni asociate:

– P1.state := ready

– Se salveaza valoarea registrilor in memorie ca si context al lui P1

– Se foloseste contextul lui P2 pt a seta registrii

– P2.state := running

Curs 3 - PPD - 30

Page 31: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Threads

• Un thread este o parte a unui proces al sistemului de operare

• Componente private fiecarui thread:

– Identificator

– Stare

– Context

– Memorie (doar stiva)

• Componente partajate cu alte thread-uri

– Cod program

– Date globale

– Heap

Curs 3 - PPD - 31

Page 32: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Threads

Curs 3 - PPD - 32

Page 33: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Preemptive multitasking

• Preemptive multitasking operating system - permits preemption of tasks.

• Cooperative multitasking operating system - processes or tasks must be explicitly programmed to yield when they do not need system resources.

• Preemptive multitasking involves the use of an interrupt mechanism which suspends the currently executing process and invokes a scheduler to determine which process should execute next.

– Therefore, all processes will get some amount of CPU time.

• In preemptive multitasking, the operating system kernel can also initiate a context switch to satisfy the scheduling policy's priority constraint, thus preempting the active task.

Curs 3 - PPD - 33

Page 34: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

CPU use

• Processes could:

– wait for input or output (called "I/O bound"),

– utilize the CPU ("CPU bound").

• In early systems, processes would often "poll", or "busywait" while waiting for requested input (such as disk, keyboard or network input).

– During this time, the process was not performing useful work, but still maintained complete control of the CPU.

• With the advent of interrupts and preemptive multitasking, these I/O bound processes could be "blocked", or put on hold, pending the arrival of the necessary data, allowing other processes to utilize the CPU.

• As the arrival of the requested data would generate an interrupt, blocked processes could be guaranteed a timely return to execution.

Curs 3 - PPD - 34

Page 35: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Multitasking advantages

• Although multitasking techniques were originally developed to allow multiple users to share a single machine, multitasking is useful regardless of the number of users.

• Multitasking makes it possible for a single user to run multiple applications at the same time, or to run "background" processes while retaining control of the computer.

• Preemptive multitasking allows the computer system to more reliably guarantee each process a regular "slice" of operating time.

– It also allows the system to rapidly deal with important external events like incoming data, which might require the immediate attention of one or another process.

Curs 3 - PPD - 35

Page 36: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Memorie partajat- Concurenta cu Threads

Exemplul 1:

Un program care la executie conduce la un proces care contine mai multe threaduri

Curs 3 - PPD - 36

Page 37: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Nondeterminism- Variante de executie

• Secvente de executie

Curs 3 - PPD - 37

Page 38: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Instructiuni atomice

• <instr> este atomica daca executia sa nu poate fi “interleaved” cu cea a altei instructiuni inainte de terminarea ei.

• Niveluri de atomicitate

Ex: x:= x + 1

Executie:

temp := x LOAD REG, x

temp := temp + 1 ADD REG, #1

x := temp STORE REG, x

Curs 3 - PPD - 38

Page 39: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Variante de executie

• exemplul anterior

• o executie "interleaving"

Curs 3 - PPD - 39

Page 40: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Exemplul -2

Două fire de execuţie decrementează variabila V până la 0

while (v>0)

v--;

Thread T1 Thread T2

Ce valoare va avea variabila V după terminarea execuţiei celor două fire

de execuţie?

while (v>0)

v--;

Curs 3 - PPD - 40

Page 41: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Exemplul 2- Varianta de executie

V = 1

....

Thread T1 Thread T2

If (v>0) {

If (v>0) {

v--; }

V = 0

v--; }

V = -1

Preempţie

Curs 3 - PPD - 41

Page 42: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Race condition & Critical section

• Procese / threaduri independente => executie simpla fara probleme

• Daca exista interactiune (ex. Accesarea si modificarea acelasi variabile) => pot apare probleme

• Nondeterministic interleaving

• Daca rezultatul depinde de interleaving => race condition (data race)

– Se incearca sa se foloseasca aceeasi resursa si ordinea in care este

folosita este importanta!

• Pot fi erori extrem de greu de depistat!!!

Curs 3 - PPD - 42

Page 43: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

43

Race Conditions & Critical Sections

• O sectiune de cod care conduce la race conditions se numeste critical section (sectiune critica).

public class Counter {

protected long count = 0;

public void add(long value){

this.count = this.count + value;

}

}

• Metoda add() este un exemplu de sectiune critica care conduce la race conditions.

Daca un obiect de tip Counter este folosit de 2 sau mai multe

threaduri!

=> Nu e thread-safe!

Curs 3 - PPD -

Page 44: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Solutii

Curs 3 - PPD - 44

Necesar ->Accesul la date în sectiune critică făcut într-un mod ordonat, astfel încât rezultatele să fie predictibile

• Soluţii: o atomicizarea zonei critice o dezactivarea preempţiei în zona critică o secvenţializarea accesului la zona critică

Page 45: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

45

Counter -> Detaliere la nivel de registrii

• Codul nu este executat ca si o instructiune atomica:

get this.count from memory into register

add value to register

write register to memory

• Exemplu de intretesere

this.count = 0;

A: reads this.count into a register (0)

B: reads this.count into a register (0)

B: adds value 2 to register

B: writes register value (2) back to memory. this.count now equals 2

A: adds value 3 to register

A: writes register value (3) back to memory. this.count now equals 3

Curs 3 - PPD -

Page 46: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Race conditions/cache

Curs 3 - PPD - 46

Page 47: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Race conditions/cache

Curs 3 - PPD - 47

Page 48: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Race conditions/cache

Curs 3 - PPD - 48

2

Page 49: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Thread safety

Curs 4 - PPD - V. Niculescu 49

Page 50: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

50

Thread Safety si Shared Resources

• Codul care poate fi apelat simultat de mai multe threaduri si produce

intotdeauna rezultatul dorit/asteptat se numeste thread safe.

• Daca o bucata de cod este thread safe atunci nu contine race conditions.

• Race condition apare atunci cand mai multe threaduri actualizeaza resurse

partajate.

– care sunt acestea….?

Curs 3 - PPD -

Page 51: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

51

Variabile Locale

• Sunt stocate pe stiva de executie a fiecarui thread.

• Prin urmare nu sunt niciodata partajate.

– => thread safe.

public void someMethod(){

long threadSafeInt = 0;

threadSafeInt++;

}

Curs 3 - PPD -

Page 52: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

52

Local Object References

• Referinta poate fi locala si nu este partajata.

• Obiectul referit poate fi partajat – shared heap

• Daca obiectul este folosit doar in interiorul threadului care il defineste => thread safe

public void someMethod(){

LocalObject localObject = new LocalObject();

localObject.callMethod();

method2(localObject);

}

private void method2(LocalObject localObject){

localObject.setValue("value");

}

Curs 3 - PPD -

Page 53: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

53

Exemplu: not thread safe

public class NotThreadSafe{

StringBuilder builder =

new StringBuilder();

public void add(String text){

this.builder.append(text);

}

public static void main(String[]a){

NotThreadSafe sharedInstance = new NotThreadSafe();

new Thread(new MyRunnable(sharedInstance)).start();

new Thread(new MyRunnable(sharedInstance)).start();

}

public class MyRunnable implements Runnable{

NotThreadSafe instance = null;

public MyRunnable(NotThreadSafe instance){

this.instance = instance;

}

public void run(){

this.instance.add(“text ….LUNG");

}

}

Curs 3 - PPD -

Page 54: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

54

Thread Control Escape Rule

• Daca o resursa este creata, folosita si eliminata in interiorul controlului

aceluiasi thread atunci folosirea acelei resurse este thread safe.

Curs 3 - PPD -

Page 55: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Thread-safe class

• Thread-safe class

– daca comportamentul instantelor sale este corect chiar daca este accesat din threaduri multiple indiferent de executia intretesuta a lor(interleaving) fara sa fie nevoie de sincronizari aditionale sau alte conditii impuse codului apelant.

– sincronizarile sunt incapsulate in interior si astfel clientii clasei nu trebuie sa foloseasca altele speciale.

• Similar Thread-safe code

Curs 4 - PPD - V. Niculescu 55

Page 56: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

56

Variabile locale

• Variabilele locale din thread-uri sunt stocate pe stiva fiecarui thread.

• Nu sunt partajate.

• Prin urmare toate variabilele primitive locale sunt thread safe.

Ex:

public void someMethod(){

long threadSafeInt = 0;

threadSafeInt++;

}

Curs 4 - PPD - V. Niculescu

Page 57: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

57

Referinte Locale

• Referintele nu sunt partajate (orice obiect este accesibil printr-o referinta).

• Obiectul referit este partajat (shared heap).

• Daca un obiect creat local nu se foloseste decat local in metoda care il creeaza atunci este thread safe.

• Daca un obiect creat local este transferat altor metode dar nu este transferat altor threaduri atunci este thread safe.

Cum se asigura ca nu va fi transferat altor threaduri???

Ex: public void someMethod(){ LocalObject localObject = new LocalObject(); localObject.callMethod(); method2(localObject); } public/private void method2(LocalObject localObject){ localObject.setValue("value"); }

Curs 4 - PPD - V. Niculescu

Page 58: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

58

Shared Variables

• shared memory

• (Java) -> Toate atributele claselor, campurile statice si elementele tablourilor sunt stocate in heap shared.

• Doua operatii de acces (read or write) la aceeasi variabila se spune ca sunt in conflict daca cel putin unul este scriere (write).

Curs 4 - PPD - V. Niculescu

Page 59: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Thread-Safe shared variables

• Daca mai multe thread-uri folosesc o variabila mutabila(modificabila) fara sa foloseasca sincronizari codul nu este safe.

• Solutii:

– eliminarea partajarii valorii variabilei intre threaduri

– transformarea variabile in variabila_imutabila (var imutabile sunt thread-safe)

– sincronizarea accesului la starea variabilei

Curs 4 - PPD - V. Niculescu 59

Page 60: Curs 3vniculescu/didactic/PPD/C3.pdfVarianta: masina vectoriala (un singur procesor cu unitati functionale multiple, toate efectuand aceeasi operatie in acelasi moment de timp). Curs

Forme de interactiune intre procese/threaduri

1. comunicarea între procese/thread-uri distincte -transmiterea de informaţii între procese

- thread-signaling

2. sincronizarea astfel încât procesele să aştepte informaţiile de care au nevoie şi nu sunt produse încă de alte procese/tread-uri - restricţii asupra evoluţiei în timp a unui proces/thread

Curs 4 - PPD - V. Niculescu 60