Acme-Parataxis
view release on metacpan or search on metacpan
t/029_saturation.t view on Meta::CPAN
my $chan = Acme::Parataxis::Channel->new( capacity => 1 );
my ( $seq, $consumed ) = ( 0, 0 );
my $pairs = 64;
my @f;
for ( 1 .. $pairs ) {
push @f, fiber { $chan->put( ++$seq ) }
}
for ( 1 .. $pairs ) {
push @f, fiber {
my $v = $chan->get;
ok $v == ++$consumed, "channel cascade: delivered token $v in order" or note "got $v, expected $consumed";
};
}
undef @f; # drop our references; the C context keeps the parked fibers alive
yield for 1 .. 3;
};
ok live_count() == 0, 'channel cascade: all producers/consumers drained';
# Semaphore wake burst
async {
my $sem = Acme::Parataxis::Semaphore->new( count => 2 );
my $guards = 0;
my $g = 200;
my @f;
for ( 1 .. $g ) {
push @f, fiber { $sem->guard; $guards++ }
}
( run in 0.672 second using v1.01-cache-2.11-cpan-e7c6538aa59 )