Какие механизмы параллелизма предоставляет Raku и как их можно оценить? [закрыто]

Dec 28 2020

Я студент, в настоящее время работаю над своей диссертацией о Raku, для которой я решил оценить, является ли Raku (Perl 6) хорошим языком для работы с высокой степенью параллелизма.

Мне не удалось найти никаких документов о параллелизме Raku, кроме официального сайта. Кроме того, я понятия не имею о том, как оценивать параллелизм Raku (например, какую программу мне следует использовать, какой язык следует сравнивать с Raku и т. Д.).

Какие механизмы параллелизма предоставляет Raku? Где это задокументировано? Как можно оценить их функциональность и производительность?

Ответы

14 JonathanWorthington Dec 29 2020 at 05:39

Raku предоставляет ряд различных механизмов параллелизма (и, кроме того, также предоставляет несколько подходов к параллельному программированию, но я предполагаю, что вопрос действительно касается только параллелизма). Большинство того, что есть в Раку, можно найти на других языках; Например:

  • Механизм gather/ takeдля ленивого создания значений. На разных языках это видно как функции генератора; в Raku, однако, нет ограничения на один кадр стека, поэтому они являются мощными сопрограммами. (Этого нет ни в каком контексте, связанном с асинхронным программированием, но он по-прежнему соответствует определению параллелизма).
  • PromiseМеханизм для передачи одного результата асинхронных операций много как Promiseс в JavaScript или Taskв .NET (семантика немного ближе к последнему).
  • A Supply- это поток асинхронных значений. Он имеет много общего с реактивными расширениями (Rx) , однако выбрал именование и API, которые соответствуют общему дизайну языка Raku (например, имена методов соответствуют их синхронным двойникам в последовательностях).
  • ChannelЯвляется одновременно очереди, которая имеет механизм , чтобы передать завершение и ошибок, а это означает , что вы можете легко перейти betwee Supplyи Channelпарадигм. Ключевое отличие состоит в том, что у a Channelесть хранилище - вы можете помещать в него значения и сразу же переходить к чему-то еще - в то время как если вы отправляете значение в a, Supplyвы оплачиваете затраты на обработку (обеспечивая механизм противодавления). Используя Channels, можно построить различные архитектуры , например поэтапную архитектуру, управляемую событиями .

Самая отличительная концепция в Raku, которая не существует непосредственно в других языках, - это конструкция react/ supply/ whenever. Написание процессоров для нескольких асинхронных потоков часто является сложной задачей (управление подпиской, контроль параллелизма); конструкция обеспечивает к ней подход структурного программирования. Кроме того, это в основном вопрос языковой интеграции, которая в Raku немного сильнее, а не обращения с этими вещами как с библиотеками.

Как отмечали другие, формальных документов пока не так много. Однако эти слайды могут представлять интерес (отказ от ответственности: они мои; я внес свой вклад в дизайн параллелизма Raku и изобрел react/ supply/ whenever).

  • 8 способов реализовать параллелизм и параллелизм в Perl 6
  • Понимание реакции, предложения и когда
  • Параллелизм изнутри Perl 6 - взгляд на то, как он реализован
9 jjmerelo Dec 28 2020 at 17:53

Статьи о параллелизме в Raku : если вам нужно описание того, как работает параллелизм, я не знаю научных статей. Вы можете поискать в некоторых публикациях Рождественского календаря, например, о параллелизме на HTTP-серверах . Большинство книг о Раку, например мои собственные Рецепты Раку (опубликованные Apress), содержат главу о параллелизме, так что вы тоже можете это проверить. Наконец, эта статья, в которой я был соавтором, использует параллелизм Raku для эволюционных вычислений с хорошими результатами.

Как оценить параллелизм Raku: * Raku использует взаимодействующие последовательные процессы и использует каналы как первоклассные объекты. В этом смысле он похож на Go . С другой стороны, он может автоматически распределять потоки данных через гипер / гонку так же, как Джулия делает через макросы. Так что это могут быть две цели для сравнения.

Возможно, список рассылки пользователей perl6 был бы лучшим местом, чтобы задавать подобные вопросы.

5 p6steve Dec 29 2020 at 04:10

Встроенный в raku CSP - это хорошо зарекомендовавшая себя модель параллелизма, разработанная Тони (Энтони) Хоаром. Вы также можете поискать работу Билла (Уильяма) Роско, которая продолжила линию исследований Тони. Обратите внимание, что это будет общее исследование CSP. Я сомневаюсь, что есть что-то, на что можно ссылаться, но сделано специально для Raku.