Какие механизмы параллелизма предоставляет Raku и как их можно оценить? [закрыто]
Я студент, в настоящее время работаю над своей диссертацией о Raku, для которой я решил оценить, является ли Raku (Perl 6) хорошим языком для работы с высокой степенью параллелизма.
Мне не удалось найти никаких документов о параллелизме Raku, кроме официального сайта. Кроме того, я понятия не имею о том, как оценивать параллелизм Raku (например, какую программу мне следует использовать, какой язык следует сравнивать с Raku и т. Д.).
Какие механизмы параллелизма предоставляет Raku? Где это задокументировано? Как можно оценить их функциональность и производительность?
Ответы
Raku предоставляет ряд различных механизмов параллелизма (и, кроме того, также предоставляет несколько подходов к параллельному программированию, но я предполагаю, что вопрос действительно касается только параллелизма). Большинство того, что есть в Раку, можно найти на других языках; Например:
- Механизм
gather
/take
для ленивого создания значений. На разных языках это видно как функции генератора; в Raku, однако, нет ограничения на один кадр стека, поэтому они являются мощными сопрограммами. (Этого нет ни в каком контексте, связанном с асинхронным программированием, но он по-прежнему соответствует определению параллелизма). Promise
Механизм для передачи одного результата асинхронных операций много какPromise
с в JavaScript илиTask
в .NET (семантика немного ближе к последнему).- A
Supply
- это поток асинхронных значений. Он имеет много общего с реактивными расширениями (Rx) , однако выбрал именование и API, которые соответствуют общему дизайну языка Raku (например, имена методов соответствуют их синхронным двойникам в последовательностях). Channel
Является одновременно очереди, которая имеет механизм , чтобы передать завершение и ошибок, а это означает , что вы можете легко перейти betweeSupply
иChannel
парадигм. Ключевое отличие состоит в том, что у aChannel
есть хранилище - вы можете помещать в него значения и сразу же переходить к чему-то еще - в то время как если вы отправляете значение в a,Supply
вы оплачиваете затраты на обработку (обеспечивая механизм противодавления). ИспользуяChannel
s, можно построить различные архитектуры , например поэтапную архитектуру, управляемую событиями .
Самая отличительная концепция в Raku, которая не существует непосредственно в других языках, - это конструкция react
/ supply
/ whenever
. Написание процессоров для нескольких асинхронных потоков часто является сложной задачей (управление подпиской, контроль параллелизма); конструкция обеспечивает к ней подход структурного программирования. Кроме того, это в основном вопрос языковой интеграции, которая в Raku немного сильнее, а не обращения с этими вещами как с библиотеками.
Как отмечали другие, формальных документов пока не так много. Однако эти слайды могут представлять интерес (отказ от ответственности: они мои; я внес свой вклад в дизайн параллелизма Raku и изобрел react
/ supply
/ whenever
).
- 8 способов реализовать параллелизм и параллелизм в Perl 6
- Понимание реакции, предложения и когда
- Параллелизм изнутри Perl 6 - взгляд на то, как он реализован
Статьи о параллелизме в Raku : если вам нужно описание того, как работает параллелизм, я не знаю научных статей. Вы можете поискать в некоторых публикациях Рождественского календаря, например, о параллелизме на HTTP-серверах . Большинство книг о Раку, например мои собственные Рецепты Раку (опубликованные Apress), содержат главу о параллелизме, так что вы тоже можете это проверить. Наконец, эта статья, в которой я был соавтором, использует параллелизм Raku для эволюционных вычислений с хорошими результатами.
Как оценить параллелизм Raku: * Raku использует взаимодействующие последовательные процессы и использует каналы как первоклассные объекты. В этом смысле он похож на Go . С другой стороны, он может автоматически распределять потоки данных через гипер / гонку так же, как Джулия делает через макросы. Так что это могут быть две цели для сравнения.
Возможно, список рассылки пользователей perl6 был бы лучшим местом, чтобы задавать подобные вопросы.
Встроенный в raku CSP - это хорошо зарекомендовавшая себя модель параллелизма, разработанная Тони (Энтони) Хоаром. Вы также можете поискать работу Билла (Уильяма) Роско, которая продолжила линию исследований Тони. Обратите внимание, что это будет общее исследование CSP. Я сомневаюсь, что есть что-то, на что можно ссылаться, но сделано специально для Raku.