Ho fatto un programmino abbastanza semplice che usa i thread (50 alla volta).
Il problema è che dopo pochi thread che lancio la ram mi viene occupata completamente..
Qualcuno sa se c'è qualche lacuna nella gestione di memoria nei thread in perl ?
Ho fatto un programmino abbastanza semplice che usa i thread (50 alla volta).
Il problema è che dopo pochi thread che lancio la ram mi viene occupata completamente..
Qualcuno sa se c'è qualche lacuna nella gestione di memoria nei thread in perl ?
Non mi risultano problemi particolari di Perl con i thread, forse dipende dal tipo di funzioni svolte che magari sono molto pesanti.
Marco Allegretti
shishii@tiscalinet.it
Lang: PERL, PHP, SQL.
Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips
Questa è la routine che uso nel thread..codice:my $ua = LWP::UserAgent->new; my $response = $ua->get($url); if ($response->is_success) { return $response->content; } else { return "ERRORE"; }
Fuori dal thread in un ciclo uso:
HTML::TreeBuilder
HTML::FormatText
Ho provato ad utilizzare undef per forzare a liberare la ram ma niente, me ne mangia a kg..
Io lancio 50 thread, poi faccio il join di quei 50..
Poi altri 50.. cosi per 4-5 volte..
Non capisco![]()
per fare un confronto prova a non usare i thread, ma semplici processi, e vediamo che succede se il risultato è uguale allora il problema sta altrove. Poi sinceramente non so se la garbage collection (undef) sui thread funziona nella stessa maniera che sui processi.
Marco Allegretti
shishii@tiscalinet.it
Lang: PERL, PHP, SQL.
Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips
Ho provato togliendo i thread, chiaramente la memoria viene saturata più lentamente, ma viene saturata ugualmente![]()
Ho trovato il problema..
L'array "testo" si vede che viene duplicato x volte e quindi mi occupa un sacco di spazio.. ora devo trovare un altro sistema
codice:open (FILE, "file.txt"); my @testo = <FILE>; close (FILE); ... foreach my $each (@testo) { .... chiamo i thread ecc ecc .... }
E poi c'era un altro errore !
Non mi liberava la memoria di un altro array !
Ora funziona![]()
ok...
per effettuare operazioni su file molto lunghi non è opportuno usare il sistema:
open (FILE, "file.txt");
my @testo = <FILE>;
close (FILE);
...
foreach my $each (@testo) {
....
chiamo i thread ecc ecc
....
}
meglio:
open (FILE, "file.txt");
while (my $each = <FILE>) {
...
}
close (FILE);
che svolge le stesse oprazioni di prima, ma non carica l'intero file in RAM.
Marco Allegretti
shishii@tiscalinet.it
Lang: PERL, PHP, SQL.
Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips