Skip to content

Instantly share code, notes, and snippets.

@ab5tract
Last active November 23, 2024 17:59
Show Gist options
  • Save ab5tract/e8ddc624d98e17d21e2ee94e7441a900 to your computer and use it in GitHub Desktop.
Save ab5tract/e8ddc624d98e17d21e2ee94e7441a900 to your computer and use it in GitHub Desktop.
vent-at-0
> ./rakudo-m ../rakudo-test-cases/vent-at-zero-base.raku
1
50
99
148
197
246
294
my $supplier = Supplier.new;
my $chan = $supplier.Supply.throttle(1, -> $a {
say $*SCHEDULER.gist ~ " " ~ now ~ " [before sleep]";
sleep 5;
say $*SCHEDULER.gist ~ " " ~ now ~ " [after sleep]";
$a;
}, :bleed(Supplier.new), :vent-at(0)).Channel;
start {
for [1..*] {
sleep 0.1;
$supplier.emit($_);
}
}
react {
whenever $chan {
say $_.result;
}
}
> ./rakudo-m ../rakudo-test-cases/vent-at-zero-say-scheduler.raku
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211938.3443887 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211943.356422237 [after sleep]
1
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211943.457721421 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211948.46650832 [after sleep]
50
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211948.563590446 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211953.575433232 [after sleep]
99
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211953.683237358 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211958.690987378 [after sleep]
148
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211958.790724723 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211963.796718736 [after sleep]
197
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211963.872523238 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211968.878641461 [after sleep]
246
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211968.947787853 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211973.967392003 [after sleep]
295
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211974.023250136 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211979.0294494 [after sleep]
344
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211979.105887155 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211984.10901749 [after sleep]
393
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211984.194837573 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211989.203871681 [after sleep]
442
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211989.272688864 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211994.279185213 [after sleep]
491
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211994.3576346 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211999.361754023 [after sleep]
540
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732211999.455551303 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732212004.461258065 [after sleep]
589
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732212004.560727617 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732212009.569631851 [after sleep]
638
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732212009.660029992 [before sleep]
ThreadPoolScheduler.new(uncaught_handler => Callable) Instant:1732212014.66320662 [after sleep]
687
my $supplier = Supplier.new;
my $chan = $supplier.Supply.throttle(1, -> $a {
sleep 5;
say $*THREAD.gist ~ " " ~ (now - ENTER now) ~ "[I sleep]";
$a;
}, :bleed(Supplier.new), :vent-at(0)).Channel;
react {
whenever Supply.interval(0.1) {
$supplier.emit(++$);
}
whenever $chan {
say $_.result;
}
}
> ./rakudo-m ../rakudo-test-cases/vent-at-zero-supply-interval.raku
Thread #7 (GeneralWorker) 5.008180056[I sleep]
1
Thread #7 (GeneralWorker) 5.002972649[I sleep]
51
Thread #7 (GeneralWorker) 5.005099621[I sleep]
101
Thread #7 (GeneralWorker) 5.002932066[I sleep]
151
Thread #7 (GeneralWorker) 5.00499462[I sleep]
201
Thread #7 (GeneralWorker) 5.002163727[I sleep]
251
Thread #7 (GeneralWorker) 5.004871244[I sleep]
301
Thread #7 (GeneralWorker) 5.005365914[I sleep]
351
Thread #7 (GeneralWorker) 5.006040668[I sleep]
401
Thread #7 (GeneralWorker) 5.002058226[I sleep]
451
> ./rakudo-m ../rakudo-test-cases/vent-at-zero-supply-interval.raku
Thread #7 (GeneralWorker) 5.006360855 ...[I sleep]...
1
Thread #7 (GeneralWorker) 5.005354853 ...[I sleep]...
52
Thread #7 (GeneralWorker) 5.004855725 ...[I sleep]...
103
Thread #7 (GeneralWorker) 5.004737517 ...[I sleep]...
154
Thread #7 (GeneralWorker) 5.001761635 ...[I sleep]...
205
Thread #7 (GeneralWorker) 5.0046291 ...[I sleep]...
256
Thread #7 (GeneralWorker) 5.000401673 ...[I sleep]...
307
Thread #7 (GeneralWorker) 5.003804765 ...[I sleep]...
358
Thread #7 (GeneralWorker) 5.004353058 ...[I sleep]...
409
Thread #7 (GeneralWorker) 5.005436853 ...[I sleep]...
460
Thread #7 (GeneralWorker) 5.004877851 ...[I sleep]...
511
Thread #7 (GeneralWorker) 5.002565595 ...[I sleep]...
562
Thread #7 (GeneralWorker) 5.004333432 ...[I sleep]...
613
> ./rakudo-m ../rakudo-test-cases/better-timer.raku
===
Running test for 3s; intervals of 0.1 seconds
diff from expected absolute time
30 values total
ranging from -0.00801821 at idx 18
to -0.00371766 at idx 10
with a mean of -0.00649428
Quartiles:
25th -0.00697155 at idx 9
50th -0.00638203 at idx 15
75th -0.00620722 at idx 3
time between consecutive ticks
30 values total
ranging from +0.09318101 at idx 0
to +0.10325388 at idx 10
with a mean of +0.09978857
Quartiles:
25th +0.09982780 at idx 25
50th +0.10004001 at idx 12
75th +0.10027109 at idx 16
===
Running test for 3s; intervals of 0.05 seconds
diff from expected absolute time
60 values total
ranging from -0.00013187 at idx 7
to +0.00609041 at idx 25
with a mean of +0.00104545
Quartiles:
25th +0.00051076 at idx 42
50th +0.00089861 at idx 14
75th +0.00138137 at idx 40
time between consecutive ticks
60 values total
ranging from +0.04636290 at idx 26
to +0.05520748 at idx 25
with a mean of +0.05001140
Quartiles:
25th +0.04942274 at idx 52
50th +0.04999653 at idx 23
75th +0.05067282 at idx 51
> raku ../rakudo-test-cases/better-timer.raku
===
Running test for 3s; intervals of 0.1 seconds
diff from expected absolute time
29 values total
ranging from -0.00856472 at idx 0
to +0.01777930 at idx 28
with a mean of +0.00543325
Quartiles:
25th -0.00063608 at idx 7
50th +0.00655943 at idx 10
75th +0.01138683 at idx 21
time between consecutive ticks
29 values total
ranging from +0.09143528 at idx 0
to +0.10527824 at idx 10
with a mean of +0.10061308
Quartiles:
25th +0.10082582 at idx 5
50th +0.10100362 at idx 18
75th +0.10109987 at idx 13
===
Running test for 3s; intervals of 0.05 seconds
diff from expected absolute time
58 values total
ranging from +0.00125104 at idx 0
to +0.05350834 at idx 57
with a mean of +0.02681064
Quartiles:
25th +0.01358768 at idx 14
50th +0.02758419 at idx 29
75th +0.04008808 at idx 43
time between consecutive ticks
58 values total
ranging from +0.04943804 at idx 4
to +0.05224570 at idx 3
with a mean of +0.05092256
Quartiles:
25th +0.05083254 at idx 11
50th +0.05102450 at idx 41
75th +0.05110425 at idx 43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment