develooper Front page | perl.perl6.users | Postings from April 2022

Re: Help with promises, supplies and channels.

Thread Previous | Thread Next
From:
yary
Date:
April 7, 2022 03:28
Subject:
Re: Help with promises, supplies and channels.
Message ID:
CAG2CFAbnUxFA=U3Pmda-FhmP-5pdzKO5GOXcxmnuTQiotY6R7w@mail.gmail.com
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> 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> 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>> 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


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About