48. Sleep Sort на Perl 6

Да, как же без алгоритма 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

4 thoughts on “48. Sleep Sort на Perl 6”

      1. Так чем меньше delay, тем быстрее получишь результаты. Но чем меньше delay, тем больше вероятность, что потоки перепутаются.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *