Параллелизм в стиле Эрланга для других языков

StackOverflow https://stackoverflow.com/questions/22187

Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

Тем не менее, scala определенно заслуживает внимания!

Майкрософт Среда выполнения параллелизма и координации для .NET.

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

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

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

Неготовый к производству ответ Microsoft на Erlang: Microsoft Аксум

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

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

Если вы используете 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.Я полагаю, что автор библиотеки прекратил ее поддержку, но документация на их сайте очень хорошая.

Возможно, вам также захочется взглянуть на Рейю:Ruby-подобный язык сценариев, построенный на базе виртуальной машины Erlang.Reia — новый проект создателя Revactor:Тони Арчери.

Предупреждение:бесстыжая пробка!

Я разработал библиотеку для такой передачи сообщений в Haskell:Распределенный Haskell в стиле Erlang.

Волкер

ДжоКамл расширяет OCaml с помощью расчета соединений для параллельного и распределенного программирования.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top