Front page | perl.perl6.users |
Postings from April 2022
Re: Help with promises, supplies and channels.
Thread Previous
|
Thread Next
From:
David Emanuel da Costa Santiago
Date:
April 7, 2022 09:28
Subject:
Re: Help with promises, supplies and channels.
Message ID:
b81a872a-e06e-21ed-bcd1-741b2fccfd1b@gmail.com
Thanks for the information!
I opened a bug in rakudo:
https://github.com/rakudo/rakudo/issues/4853
Regards,
David Santiago
Às 05:27 de 07/04/22, yary escreveu:
> For what it's worth, I'm on a mac, promise_test.raku hangs for me once
> in a while also.
>
> Welcome to Rakudo(tm) v2021.04.
> Implementing the Raku(tm) programming language v6.d.
> Built on MoarVM version 2021.04.
>
> Trying to reduce it, I would like to find a program that reliably
> tickles this bug and hangs every time... this variation does not crash
> for me (I ran it 100x)
>
> ### close_much.raku ###
> my Channel $ch .= new;
>
> my @proms = (1..2000).map: {
> start react {
> whenever $ch.closed { done }
> }
> };
>
> $ch.close;
>
> await Promise.allof(@proms);
>
> say $*VM;
> ###
>
>
> this does not crash for me
> ### supply_to_many.raku ###
> my Channel $ch .= new;
>
> my $p1 = Supply.interval(3);
>
> my @proms = (1..2000).map: {
> start react {
> whenever $p1 { $ch.close }
> whenever $ch.closed { done }
> }
> };
>
>
> await Promise.allof(@proms);
>
> say $*VM;
> ###
>
>
> This gives a sensible error "Cannot send a message on a closed channel"
> ### close_then_send.raku ###
> my Channel $ch .= new;
>
> # Close first, send next
> $ch.close;
> $ch.send("Hi!");
> ###
>
>
> This does not crash for me, for different combinations of $senders &
> $receivers (1000,1) (1,1000) (1000,1000)
> ### config_send_recv.raku ###
> my Channel $ch .= new;
>
> my Supply $p1 .= interval(1);
>
> my ($senders, $receivers) = (2000,2);
>
>
> my Int $count = 0;
> my @sends = (1..$senders).map: {
> start react {
> whenever $p1 -> $interval {
> $ch.send($_);
> $ch.close if ++$count == $senders;
> }
>
> whenever $ch.closed { done }
>
> }
> };
>
>
> my @proms = (1..$receivers).map: {
> start react {
> whenever $ch.closed {
> done;
> }
>
> whenever $ch -> $data {
> print "$_=$data|";
> }
> }
> };
>
>
> await Promise.allof(@proms,@sends);
>
> say $*VM;
> ###
>
> I didn't succeed - fun to try!
>
> -y
>
>
> On Tue, Apr 5, 2022 at 3:55 PM William Michels via perl6-users
> <perl6-users@perl.org <mailto:perl6-users@perl.org>> wrote:
>
> Thanks for the bash loop. I'm seeing a few hangs, also some errors
> returned saying:
>
> "Unhandled exception in code scheduled on thread 4"
>
> (MacOS 11.11)
>
> On Tue, Apr 5, 2022 at 12:47 PM David Emanuel da Costa Santiago
> <demanuel@gmail.com <mailto:demanuel@gmail.com>> wrote:
>
>
> Hi William,
>
> when it fails or hangs it doesn't print the last line.
>
> Please check attached file for output of the stack.
>
> Since the failures are random, it's easier to invoke it in a loop:
>
> bash$ for i in $(seq 100); do raku test.raku; done
>
> If nothing is wrong with the code, i'll open a bug in the github.
>
> Regards,
> David Santiago
>
>
> Às 21:37 de 05/04/22, William Michels escreveu:
> > No problems so far.
> >
> > say $*VM; #add as last line, returns:
> > moar (2021.06)
> >
> > On Tue, Apr 5, 2022 at 11:06 AM David Emanuel da Costa Santiago
> > <demanuel@gmail.com <mailto:demanuel@gmail.com>
> <mailto:demanuel@gmail.com <mailto:demanuel@gmail.com>>> wrote:
> >
> > Hi,
> >
> >
> >
> > I'm trying to learn about promises, supplies and
> channels. So i made
> > this code:
> >
> > """
> >
> > my $p1 = Supply.interval(5);
> > my $p2 = Supply.interval(2);
> > my Channel $ch = Channel.new;
> >
> > my $prom = start react {
> > whenever $p1 -> $interval {
> > say "5";
> > }
> >
> > whenever $p2 -> $interval {
> > say 2;
> > }
> >
> > whenever $ch.closed {
> > done;
> > }
> >
> > whenever $ch -> $data {
> > say "Data: $data";
> > }
> > }
> >
> > my $prom2 = start react {
> > whenever $p1 -> $interval {
> > $ch.send("5.2");
> > $ch.close;
> > }
> > whenever $ch.closed {
> > done;
> > }
> > }
> >
> > my @proms = ($prom, $prom2);
> > await Promise.allof(@proms);
> >
> > """
> >
> >
> >
> > I don't see anything wrong with this but most of the
> times runs fine,
> > sometimes hangs, sometimes throw exception. Am i doing
> something that i
> > shouldn't be doing?
> >
> > $ raku --version
> > Welcome to Rakudo™ v2022.03-130-g8f7cc0847.
> > Implementing the Raku® Programming Language v6.d.
> > Built on MoarVM version 2022.03-13-ga3476e286.
> >
> >
> >
> > Regards,
> > David Santiago
> >
>
Thread Previous
|
Thread Next