> > > > 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/


Raspunde prin e-mail lui