Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

αντιμετωπίζω ένα πρόβλημα σε ένα μεγάλο project που γράφω κάποιο καιρό τώρα και συγκεκριμένα στη διαχείριση μνήμης σε νήματα. Το λειτουργικό στο οποίο θα τρέχει το πρόγραμμα είναι Windows οπότε δε μπορώ να χρησιμοποιήσω την fork().

Έτσι, χρησιμοποιώ το module threads και ανάλογα με το αρχείο που δίνεται ως είσοδο στο πρόγραμμα (ανάλογα με το μέγεθος του) δημιουργείται ο αντίστοιχος αριθμός νημάτων τα οποία τρέχουν παράλληλα μέχρι να ολοκληρωθούν. Το θέμα είναι πως μετά την ολοκλήρωση τους, και ενώ έχει πλέον ολοκληρωθεί το πρόγραμμα, η μνήμη που καταλαμβάνει στο task manager δεν μειώνεται, αρχικά είναι στα 20Mbyte αλλά ενίοτε το αρχείο, μπορεί να φτάσει τελικά μέχρι 280Mbyte :shock: η οποία δεν μειώνεται.

Δεν έχω κάποιο θέμα που η μνήμη είναι σε αυτό το επίπεδο, είναι λόγω των πολλών νημάτων που τρέχουν παράλληλα προφανώς, το θέμα είναι πως με την ολοκλήρωση των νηματων η μνημη δεν αποδεσμευεται πισω στο συστημα. Εχω διαβασει το αντιστοιχο doc στο perldoc και εχω δοκιμασει διαφορα πραγματα αλλα τιποτα.

Παρακάτω είναι το κομμάτι του κώδικα με τη δημιουργία και διαχείριση των νημάτων.

 

>
for($a=0;$a<=$$filecounter;$a++)
{

$thr[$a] = threads->create(
         sub {
         &reset_1(\($$file.$a),\($$new_filename.$a))
             });

#$thr[$a]->detach();
$result[$a]=$thr[$a]->is_running();
#$detached[$a]=$thr[$a]->is_detached();
}

$suma=sum(@result);
#$suma_detached=sum(@detached);

while($suma!=0) #&& $suma_detached!=0)
{
   for($a=0;$a<=$$filecounter;$a++)
   {
   $result[$a]=$thr[$a]->is_running();
          #$detached[$a]=$thr[$a]->is_detached();
          }
$suma=sum(@result);
#$suma_detached=sum(@detached);
}

Μεσα σε σχολια ειναι οι διαφοροι τροποι που δοκιμασα αλλα τιποτα.

Υπαρχει καποιο μελος που να ασχολειται με perl και οχι μονο για exploits :devil: που εχει κάποια ιδεα;

  • 2 εβδομάδες αργότερα...

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...