Teodor Cimpoesu wrote:
On 2/8/07, Radu Oprisan <[EMAIL PROTECTED]> wrote:
Teodor Cimpoesu wrote:
>
> iacata ca "Ma indoiesc ca in bash poti sa faci asa ceva." se poate :-P
Corect... dar chestia asta, scalata la mai mult de 20 de fork-uri o sa
iti duca procesoru' in lumea ailalta :) nu ca perl-u ar fi mai smecher
[divaghez palind un pic spre OT de dragul artei...]
hm, nu vad unde ar fi problema si la 100 de fork-uri, numai sa nu
ajungi la limita de procese per utilizator
Limita de procese per utilizator???? Nu mai zi nimic daca tot vorbesti
ca sa te afli in treaba. In cel mai rau caz, nu poti sa spawnezi mai
multe fork-uri decat nr maxim de pid-uri, care ultima data parca era
unsigned int.
pe un server normal se tot fac fork-uri, multe servicii lucreaza asa
frecvent - ia de exemplu un apache (ma rog acolo e pre-fork, dar daca
ai incarcare mare si pui maxchild pe 5 tot face forkuri in veselie.)
Pe bune?
fork-ul nu este tocmai costisitor in cele mai multe cazuri
pornind insa de la mesajul initial care mentioneaza "worker", termen
mai ales folosit pentru threaduri, bineinteles ca o solutie eleganta
si poate fi implementata si cu threaduri, tot din limbaj de scripting
fork-uri si thread-uri, sunt 2 lucruri perfect diferite. Fork-ul este o
miscare proasta, pentru ca, daca o iei pe programare, orice fork facut,
copiaza toate structurile de date, in procesul nou. Thread-ul, in
schimb, lucreaza cu shared data.
si ca sa vezi ca e simplu e (n.b. nu zic de sincronizare nimic :-):
import threading
def do_work(arg): print "arg:", arg
threads=[]
for x in range(0,10):
threads.append(threading.Thread(target=do_work, arg=[x]))
threads[-1].start()
for th in threads: th.join()
respectiv:
use threads;
sub do_work {
print "arg: $1";
}
my @threads = [];
for $x (0..9) {
$threads[$x] = threads->new(\&do_work, $x);
}
for (@threads) { $_->join; }
Omul vroia o solutie in bash, respectiv perl.
ma rog, sfatul meu este sa stai departe de Perl, Python rulz :-))
Fiecare foloseste ce ii vine in minte, sau, ma rog, limbajul de
programare cu care e cel mai obisnuit. Eu iau C sau Perl.
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug