2015-09-01 11:38 GMT+01:00 Alex 'CAVE' Cernat <[email protected]>:

> Salut
>
> Am mai lucrat cu multiprocess prin facultate, si de atunci pe ici pe
> colo, treaba e simpla: fork() * n, n copii ale datelor, wait() &
> friends, toata lumea fericita.
>
> Insa (mai nou ... sau mai vechi, ca e de multi ani), thread-urile au un
> overhead mult mai mic decat procesele, dar din cate am inteles lucreaza
>

In Linux ambele sunt la fel de "light" singura diferenta e cind procesul
scrie segmentul de date.


> cu acelasi set de date, ceea ce nu e bine, pentru ca pe mine ma
> intereseaza sa execut in paralel aceeasi bucata de cod dar pentru mai
> multe seturi de date.
>
> Practic ma intereseaza sa paralelizez ceva de genul:
>
> operatii_de_inceput();
> for(i = 0; i <= N;  i++)
>      operatii_in_paralel(i);     <<<< paralelizare
> operatii_de_final();
>
> in cazul meu operatiile de final (daca exista)  nu se bazeaza pe cele in
> paralel (decat cel mult niste coduri de ok / eroare), astfel incat cu
> procese le-as putea scoate usor, dar daca se poate cu thread-uri si e
> mai performant ... de ce nu ?
>
> problema la care nu-i dau de cap (cel mai probabil pentru ca nu am
> inteles inca prea bine cum functioneaza threadurile) este cum fac o
> copie locala a unei variabile, astfel incat variabila respectiva sa aiba
> valorea doar pentru threadul respectiv, in alt thread putand avea o alta
> valoare, iar o asignare a acelei variabile intr-un thread sa nu
> influenteze valoarea aceleiasi variabile dintr-un altul
>

multiprocess: acelasi segment de cod, datele sunt copy-on-write, stiva
diferita.
multithread: acelasi segment de cod si date, stiva diferita.

solutia e ce variabile vrei sa fie "locale" le pui pe stiva sau de la
inceput aloci datele segmentate(sharded).
Daca sa zicem ai 32 threads partitionezi datele in 32 bucati si fiecare
thread e cu datele lui.

array[thread_id][data_index]  - asta din motive de localitate de date/cache
thrashing/etc.

rezumand, in principiu ma intereseaza daca se poate face exact acelasi
> lucru ce as putea sa fac cu multiproces ('copie' a datelor), dar
> folosind threaduri (cel putin unele variabile sa fie 'locale' threadului)


avantajul multithread e ca poti sa modifici datele si asta e "vizibila"
pentru toat thread-urile daca de ex. trebuie sa treci de mai multe ori
peste acelasi set de date.


>
> Mersi
> Alex
> _______________________________________________
> RLUG mailing list
> [email protected]
> http://lists.lug.ro/mailman/listinfo/rlug
>
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui