my $total_children = 1000; my $max_children = 100; my $job_size = 10; my $main_pfm = P::FM->new( $max_children/$job_size ); foreach ( 1..$total_children/$job_size ) { $main_pfm->start and next; run_job( $job_size ); $main_pfm->finish; } sub run_job { my $job_size = shift; my $job_pfm = P::FM->new( $job_size ); foreach ( 1..$job_size ) { $job_pfm->start and next; sleep $_; $job_pfm->finish; } }