Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460

    quando il perl si mangia ram..

    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 ?

  2. #2
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    codice:
            my $ua = LWP::UserAgent->new;
            my $response = $ua->get($url);
            if ($response->is_success) {
                return $response->content;
            }
            else {
                return "ERRORE";
            }
    Questa è la routine che uso nel thread..

    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

  4. #4
    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    Ho provato togliendo i thread, chiaramente la memoria viene saturata più lentamente, ma viene saturata ugualmente

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    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
               ....
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    E poi c'era un altro errore !
    Non mi liberava la memoria di un altro array !

    Ora funziona

  8. #8
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.