Да, как же без алгоритма Sleep Sort?! Он должен быть аналогом «Hello, World!» для языков, умеющих делать параллельные вычисления. Итак, Sleep Sort на Perl 6.
my @data = 12, 4, 7, 5, 8, 1, 2; await gather for @data -> $d { take start { sleep $d / 10; say $d; } }
На каждый элемент данных создается отдельный поток, который ждет $d / 10 секунд и печатает число. Можно попробовать поделить и на большее число, но при этом возможно состояние гонки между потоками.
Сочетание await, gather и take позволяет дождаться все потоки и только потом завершить основную программу.
Запускаем программу, она печатает отсортированные числа:
$ perl6 sleep-sort.pl 1 2 4 5 7 8 12
На glot.io не фурычит:
4
1
2
5
7
12
8
Убери деление на 10 или поставь число поменьше.
У меня на винде результаты разные. Здесь: http://rosettacode.org/wiki/Sorting_algorithms/Sleep_sort#Perl_6 нет деления на 10, просто sleep $delay
Так чем меньше delay, тем быстрее получишь результаты. Но чем меньше delay, тем больше вероятность, что потоки перепутаются.