2008-08-22 9 views
19

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

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

+0

Основная трудность заключается в том, что, хотя вы можете получать сообщения, проходящие на других языках, чрезвычайно сложно имитировать использование Эрлангом огромного количества процессов. Нерестные процессы в Erlang аналогичны экземплярам объектов в Java или Python - вы об этом не думаете. Если вы сделаете это на уровне ОС, вы быстро исчерпаете ресурсы, а это значит, что это не просто передача сообщений, но объединение, которое должно быть обработано в архитектуре. В этом отношении Э. Эрланг - это немного сложный поступок. Конечно, не каждая проблема требует миллионов параллельных процессов. – zxq9 2014-10-01 10:52:56

ответ

7

Интерфейс передачи сообщений (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.

6

Microsoft Concurrency and Coordination Runtime для. NET.

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

7

Скала поддерживает актеров. Но я бы не назвал scala намеренно подобным Erlang.

Тем не менее scala абсолютно стоит взглянуть!

6

Также kilim - это библиотека для java, которая приносит стилю сообщения erlang style/actors на язык Java.

5

Mike Rettig создал библиотеку .NET под названием Retlang и порт Java Jetlang, который вдохновлен моделью параллелизма Erlang.

14

Ulf Wiger был большой пост в последнее время на эту тему - вот свойства он определяет, как требуется, прежде чем вы можете назвать что-то «Erlang Стиль Concurrency»:

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

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

2

Предупреждение: бесстыдная заглушка!

У меня была (а) библиотека для такого типа сообщений, проходящих в Haskell: Erlang-style Distributed Haskell.

Volker

3

Если вы используете 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: рубинообразный скриптовый язык, построенный на вершине виртуальной машины Erlang. Рейя - новый проект создателя Revactor: Тони Арьери.

2

JoCaml расширяет OCaml с присоединиться к исчислению для одновременного и распределенного программирования.

1

Акка (http://akka.io) находится под сильным влиянием erlangs OTP. Он построен на актерах scala и отлично подходит для параллелизма на JVM.