> > > > Modelele de threading m:n (procese/thread-uri) adauga complexitate > > > > in scheduler.
> > Mai rapide nu mi-e clar de unde ar fi. > Mai rapide sunt la creare (de 7-8 ori fata de fork() pe alte > UNIX-uri) si la sch de context. Iar pt. un server care deserveste un > request pe un thread (de ex. server web) acel 7-8 ori inseamna > enorm. Detalii la > http://www.llnl.gov/computing/tutorials/workshops/workshop/pthreads/MAIN.htm > l#WhyPthreads Nu vreau sa par un linux-maniac, dar faptul ca pthread_create() e mai rapid decat fork() pe alte UNIX-uri de 7-8 ori, e cam irelevant. Pe linux, e undeva sub 2 ori. Benchmark-ul ala nu seamana cu mai nimic care sa se intample in-real-life. Daca serverul tau de web *porneste* un proces/thread per request, nu cred ca are sens sa il aducem in discutia despre performante :-) N-am un POWER pe-aici sa incerc, dar pe PIII-ul meu, la 600MHz, lucrurile stau cam asa cu cele 50.000 procese/thread-uri pe care le creeaza ei: fork() pthread_create() real user sys real user sys 600MHz PIII 256M RAM 9.332 1.830 7.430 4.858 1.040 3.810 single CPU Datele lor, probabil pe AIX, sunt: 332 MHz 604e 4 CPUs/node 92.42 2.66 105.29 8.72 4.97 3.93 512 MB Memory 222 MHz POWER3 8 CPU/node 80.05 3.71 82.30 8.64 3.74 5.84 4 GB Memory 375 MHz POWER3 16 CPUs/node 173.62 13.86 172.13 9.58 3.78 6.74 16 GB Memory De acord, o comparatie head-to-head nu se poate face, pentru ca sistemul meu are alta arhitectura si nu e multiprocesor, dar in mod normal ar trebui sa fie in defavoarea mea (in realitate nu e, pentru ca aparent AIX (?) sucks si nu scaleaza, vezi rezultatele la masina cu 16 procesoare, unde desi procesoarele sunt cele mai rapide, timpul de executie e dublu :-) Unde vroiam sa ajung era la diferenta de un ordin de marime (!!!) la timpul de executie pentru fork() ... Mi-e ca nu poti neglija asta cand spui: pthread_create/join e de 8 ori mai rapid decat fork/wait pe alte sisteme, pe linux e DOAR de 2 ori, decat daca ai ochelari de cal :-))) Acum, in ceea ce priveste schimbarea de context, asta NU ARE CUM sa fie mai rapida sau mai lenta, decat daca cineva are o implementare proasta... tot salvatul-restauratul registrilor se intampla indiferent de situatie. In ceea ce priveste utilizarea resurselor: fork() este un clone(0), pthread_create este un clone(CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND). Flag-urile respective indica faptul ca noul proces creat are in task_struct pointeri catre structurile care descriu subsistemul respectiv, din procesul care se fork-uieste (procesul curent), in loc sa aiba copii independente. Thread-urile 1:1 nu mananca "mult mai multe resurse" decat alelalte... Din partea celor care iubesc thread-urile si vin din alte sisteme de operare, o sa vezi tot timpul o oarecare ostilitate fata de linux, din cauza ca multi din developerii de linux (kernel) *nu* iubesc foarte tare thread-urile in general :-) > Ionut Cheers, Matei PS: there are lies, damn lies and then there are benchmarks... :) --- Pentru dezabonare, trimiteti mail la [EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'. REGULI, arhive si alte informatii: http://www.lug.ro/mlist/
