Hello, Consider my code below would like to execute the sleep() function in parallel, using POE JobQueue component:
#============= use strict; use POE qw(Component::JobQueue); # Passive queue waits for enqueue events. POE::Component::JobQueue->spawn( Alias => 'passive', WorkerLimit => 16, Worker => \&spawn_a_worker, Passive => { Prioritizer => sub { 1 } } ); sub spawn_a_worker { my ( $postback, @job_params ) = @_; POE::Session->create( inline_states => { _start => \&start, sleep => \&sleep }, args => [ $postback, @job_params, ], ); } POE::Session->create( inline_states => { _start => \&init, _stop => sub { print "END" } } ); POE::Kernel->run(); exit(0); sub init { my $kernel = $_[KERNEL]; foreach ( 1 .. 10 ) { $kernel->post( passive => enqueue => response => $_ ); } } sub start { my $kernel = $_[ KERNEL ]; print "Starting\n"; $kernel->yield("sleep"); } sub sleep { print "Sleeping for 5 seconds\n"; sleep 5; } #========== It seems that tasks still block each other? If not, I would have all message executed at the end of 5 seconds.