forking, and then calling system to run the command, means he's forking twice for every command. Maybe 3 times depending what's in $command.

You can achieve the goal without threads on win32 like this:

#! perl -slw use strict; my @dates = 1 .. 10; my @pids; (my $cmd = <<'CMD' ) =~ s[\s+][ ]g; -wle"print qq[task $ARGV[0] starting]; sleep rand( 10 ); print qq[task $ARGV[ 0 ] finishing];" CMD while( my $date = pop @dates ) { push @pids, system 1, 'perl.exe', "$cmd $date"; if( @pids >= 5 ) { my $kid = wait; @pids = grep $_ != $kid, @pids; } } waitpid $_, 0 for @pids;

Since you need to load a new executable, why not just start it in a new process rather than duplicating the current one first?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

In reply to Re^5: forks for running multiple codes at same time by BrowserUk
in thread forks for running multiple codes at same time by adamquestion

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":