Skip to content

Instantly share code, notes, and snippets.

@Altai-man
Last active July 13, 2019 23:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Altai-man/66317a1152d40f546650cc6402b6937b to your computer and use it in GitHub Desktop.
Save Altai-man/66317a1152d40f546650cc6402b6937b to your computer and use it in GitHub Desktop.
func main() {
jobs := make(chan int, 100)
results := make(chan int, 100)
go worker(jobs, results)
for ^100 {
jobs <- i
}
close(jobs)
for ^100 {
print <- results
}
func worker(jobs <-chan int, results chan<- int) {
for n := range jobs {
results <- fib(n)
}
}
func fib(n int) int {
if n <= 1 {
return n
}
return fib(n - 1)
}
sub MAIN() {
my $jobs = Channel.new;
my $results = Channel.new;
for ^4 {
start worker($jobs, $results);
}
$jobs.send($_) for ^100;
$jobs.close;
react whenever $results.Supply -> $result {
say $result;
}
}
sub worker($jobs, $results) {
react whenever $jobs.Supply -> $job {
$results.send: fib($job);
LAST { $results.close }
}
}
sub fib($n) {
return 1 if $n <= 1;
return fib($n - 1) + fib($n - 2);
}
sub fib($n) {
return 1 if $n <= 1;
return fib($n - 1) + fib($n - 2);
}
my @jobs = 0..100;
my $results = @jobs.race(batch => 1, degree => 4).map({ fib($_) });
react whenever $results.Supply -> $result {
$result.say;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment