Sunteți pe pagina 1din 2

Asemnri ntre procese i threads

Au ID, set de regitri, stare i prioritate proprii;


Au bloc de informaii asociat (PCB- Process Control Bloc, respectiv TIB- Thread
Information Bloc)
Pot partaja resursele cu P (Printele)
Dup creare, devin entiti independente
Cei care le creeaz le pot controla
i pot modifica atributele i pot crea resurse (formuleaz cereri, le sunt alocate, le elibereaz
etc.)
Nu pot folosi direct resursele altor procese/threads cu care nu au legturi
Deosebiri ntre procese i threads
Un proces are spaiu propriu de adres, un thread nu. Toate threads ce aparin unui proces
partajeaz spaiul de adres (de memorie) al acestuia
Procesele P i C trebuie s foloseasc mecanisme de comunicare (pentru date, nu au
memorie comun!). Threads ce aparin aceluiai proces comunic citind/scriind date n
variabilele procesului (folosesc n comun memoria de date i heap a acestuia)
Procesele C NU au control asupra altor procese C. Un thread poate controla orice alt
thread aparinnd aceluiai proces.
Procesul C NU are control asupra procesului P. Un thread poate controla att thread-ul
care l-a creat, ct i ntregul proces.

Avantaje threads
Creare proces == creare thread principal
Apoi, crearea celorlalte threads:
o Costuri mici pentru
Creare (de 10 ori mai puin SO Solaris)
Comutare context (de 5 ori mai puin idem)
o Timp de execuie mai bun (mai ales pt. sisteme multiprocesor)
o Nu au nevoie de mecanisme de comunicare => utilizare eficient a resurselor
(acelai spaiu de adres)
o Asigur timp de rspuns mai bun (Responsivness) ex. Browser Web: continu s
interacioneze cu utilizatorul pe un thread (rapid) n timp ce se ncarc o imagine pe
un alt thread (lent)
Dezavantaje treads
Au nevoie de sincronizarea accesului la memorie (vom vedea, la problema productorconsumator!)
Procesele sunt izolate dac produc date eronate, acestea aparin procesului respectiv.
Threads pot provoca erori care s compromit execuia celorlalte threads din acelai proces.
Procesele sunt mai independente => pot fi folosite ca module n cadrul unor alte aplicaii.
Threads depind de procesul propriu, nu exist n afara lui.
Procesele i pot proteja resursele fa de alte procese. Threads nu, faa de alte threads din
acelai proces.

Tipuri de fire de execuie (threads)


Clasificare dup modul n care i realizeaz sarcina:
sleepers i one-shot
anticipating work
deferring work
Sleepers
Suspendate, pn la apariia unui eveniment
Reluate i execut ceva
Din nou inactive, pn la apariia altui eveniment
One-shot == sleepers care se execut o singur dat i se ncheie.
Sleepers i one-shot se folosesc, n general, pentru monitorizarea unui anumit aspect al unei
aplicaii.
De exemplu, pentru monitorizarea activitii printr-un port de comunicaie:
suspendat ct tip se folosete portul
se reia cnd portul devine inactiv i monitorizeaz durata pauzei
dac durata pauzei > 5000 ms, nchide portul de comunicaie
dac a nchis portul, se ncheie (nu mai are obiect de activitate)
Anticipating work
sarcina va fi executat nainte de a fi solicitat
aplic regula never-wait, descurajnd lipsa de activitate, conform principiului: mai bine
s realizezi ceva ce s-ar putea s nu fie folosit niciodat dect s stai degeaba!
Ex. schematic:
thread A
d=a+a;
thread B
if (d>10) a=5;
thread C
x=5*a;
Thread-urile A i C pot fi executate simultan (asincron) i, dac apoi thread B nu va schimba
valoarea lui a, dup terminarea sa rezultatul este deja calculat (s-a ctigat timp!). Doar n cazul n
care thread B schimb valoarea lui a, se mai execut o dat thread C.
Deferring work
un thread poate amna/delega propria sarcin ctre alt thread existent/creat de el, care se
execut mai trziu
motiv: execut anumite sarcini critice, nu este n stare s se mai ocupe i de altceva
pot fi desemnate threads de tip detached pentru a realiza sarcina n background.