Эрланг-стиль параллелизма для других языков - PullRequest
19 голосов
/ 22 августа 2008

Какие библиотеки существуют для других языков программирования для обеспечения модели параллелизма в стиле Эрланга (процессы, почтовые ящики, получение с совпадением с образцом и т. Д.)?

Примечание. Меня особенно интересуют вещи, которые должны быть похожи на Erlang, а не просто какая-либо библиотека потоков или очередей.

Ответы [ 13 ]

14 голосов
/ 10 сентября 2008

Ульф Вигер недавно опубликовал отличную статью на эту тему - вот свойства, которые он определяет по мере необходимости, прежде чем вы сможете назвать что-то "Параллельность стиля Эрланга":

  • Быстрое создание / уничтожение процесса
  • Возможность поддержки >> 10 000 параллельных процессов с практически неизменными характеристиками.
  • Быстрая асинхронная передача сообщений.
  • Копирование семантики передачи сообщений (параллелизм без разделения ресурсов).
  • Контроль процесса.
  • Выборочный прием сообщений.

Номер 2, указанный выше, труднее всего поддерживать в виртуальных машинах и языковых реализациях, которые изначально не были предназначены для параллелизма. Это не для того, чтобы сбить реализации параллелизма Erlang-ish на других языках, но большая ценность Erlang заключается в способности создавать миллионов процессов, что довольно сложно, если абстракция процесса имеет 1-1 отношения с потоком или процессом уровня ОС. Ульф имеет гораздо больше об этом в ссылке выше.

7 голосов
/ 22 августа 2008

Интерфейс передачи сообщений (MPI) (http://www -unix.mcs.anl.gov / mpi / ) - это масштабируемая и надежная библиотека для параллельного программирования, ориентированная на оригинал для C, но теперь доступная в несколько разновидностей http://en.wikipedia.org/wiki/Message_Passing_Interface#Implementations. Хотя библиотека не вводит новый синтаксис, она предоставляет протокол связи для организации обмена данными между подпрограммами, которые распараллеливаются.

Традиционно он используется в больших кластерных вычислениях, а не в одной системе для параллелизма, хотя многоядерные системы, безусловно, могут воспользоваться этой библиотекой.

Другим интересным решением проблемы параллельного программирования является OpenMP, который представляет собой попытку предоставить переносимое расширение на различных платформах, чтобы дать подсказки компилятору о том, какие разделы кода легко распараллеливаются.

Например (http://en.wikipedia.org/wiki/OpenMP#Work-sharing_constructs):

#define N 100000
int main(int argc, char *argv[])
{
  int i, a[N];
  #pragma omp parallel for
  for (i=0;i<N;i++) 
     a[i]= 2*i;
  return 0;
}

Конечно, у обоих есть свои преимущества и недостатки, но первый оказался чрезвычайно успешным в научных кругах и других тяжелых научных вычислительных приложениях. YMMV.

7 голосов
/ 22 августа 2008

Скала поддерживает актеров. Но я бы не назвал скала намеренно похожей на Эрланга.

Тем не менее, scala абсолютно стоит посмотреть!

6 голосов
/ 22 августа 2008

Также kilim - это библиотека для Java, которая переносит передачу сообщений / актеров в стиле эрланга на язык Java.

6 голосов
/ 22 августа 2008

Microsoft Среда параллелизма и координации для .NET.

CCR подходит для модель приложения, которая разделяет компоненты на куски, которые могут взаимодействовать только через сообщения. Компоненты в этой модели нуждаются в средствах для координировать между сообщениями, иметь дело с сложные сценарии отказов и эффективно бороться с асинхронным программирования.

5 голосов
/ 22 августа 2008

Майк Реттиг создал библиотеку .NET с именем Retlang и порт Java под названием Jetlang, основанный на модели параллелизма Эрланга.

4 голосов
/ 09 июня 2009

Microsoft не готов к производству Ответ Эрлангу: Microsoft Axum

3 голосов
/ 09 июня 2009

Если вы используете Ruby, взгляните на Revactor: [http://revactor.org/][1]

Revactor - это реализация модели Actor для Ruby 1.9, построенная на основе высокопроизводительной библиотеки событий Rev. Revactor в первую очередь предназначен для написания Erlang-подобных сетевых сервисов и инструментов.

Посмотрите на этот пример кода:

  myactor = Actor.spawn do
    Actor.receive do |filter|
      filter.when(:dog) { puts "I got a dog!" }
    end
  end

Revactor работает только на Ruby 1.9. Я считаю, что автор библиотеки прекратил ее обслуживание, но документация на их сайте очень хорошая.

Возможно, вы также захотите взглянуть на Reia - язык сценариев, похожий на ruby, построенный поверх виртуальной машины Erlang. Reia - это новый проект создателя Revactor: Tony Arcieri.

3 голосов
/ 08 ноября 2008

Термит для Гамбита.

3 голосов
/ 22 августа 2008

Для python вы можете попробовать использовать модуль обработки .

...