Memory management via fork is a good idea; I've used it in several situations (usually when I'm going to leak memory).
The problem WoodyWeaver may have is that when the child exits normally, it will still go through the ten hours of data structure destruction, and the parent will wait the whole time. Taking some code from davidrw and some from my own node,
use Set::Light;
my $pid = fork;
die "Can't fork: $!" if ! defined $pid;
if($pid){ # parent
my $start_time = time;
wait;
printf "Child exited after %d seconds\n", time - $start_time;
}
else { # child
my $start_time = time;
my $set = Set::Light->new();
for( my $i = 0; $i < 10_000_000; $i++ ) {
$set->insert( $i );
}
printf "Child done after %d seconds\n", time - $start_time;
exit;
}
__END__
Child done after 36 seconds
Child exited after 163 seconds
The solution to this is not to let the child exit normally (i.e., kill it). In the above code, if I change "exit" to "kill 9 => $$", the OS does the memory reclamation, and the output looks like this:
Child done after 32 seconds
Child exited after 32 seconds
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|