cate thread-uri? ia incearca cu 2 thread-uri pe un procesor cu minim 2 core-uri.
t. 2015-09-02 6:47 GMT+03:00 Catalin(ux) M. BOIE <[email protected]>: > Salut. > > Lucrind la un web server folosind libraria Conn (LGPL, la mine pe site) > am trecut de la procese la thread-uri. Si am avut o surpriza mare. > La profiling imi aparea o functie foarte des: __libc_disable_asynccancel, > __libc_enable_asynccancel, __pthread_disable_asynccancel, > __pthread_enable_asynccancel. Toate 4 in primele 15 intrari, ordonate dupa > cit timp dureaza. Cea ce doare. > Asa ca am cautat ce fac aceste functii. Se pare ca au treaba cu functia > pthread_cancel; pare ca o tona de locuri din cod sint invelite in > disable/enable cancel. Si asta costa. Cel putin se observa in valgrind, > dar daca imi aduc aminte, am observat si la timpul de executie. > > Deci, daca poti sa mergi cu procese, uita de thread-uri. > Si procesele le poti mapa pe CPU-uri diferite cu > pthread_attr_setaffinity_np. > La thread-uri, poti partaza usor datele, dar trebuie sa ai grija cum. > Foarte probabil o sa ai nevoie de functiile specifice de locking alre > pthread sau de RCU (userspace-rcu, recomandat). > > -- > Catalin(ux) M. BOIE > http://kernel.embedromix.ro/ > > On Tue, 1 Sep 2015, Alex 'CAVE' Cernat wrote: > > > 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 > > 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 > > > > 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) > > > > 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 > _______________________________________________ RLUG mailing list [email protected] http://lists.lug.ro/mailman/listinfo/rlug
