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

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

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

22.08.2008 12:19:29
Основная трудность здесь заключается в том, что, хотя вы можете получать сообщения на других языках, чрезвычайно сложно имитировать использование Эрлангом огромного числа процессов. Порождение процессов в Erlang похоже на создание экземпляров объектов в Java или Python - вы не думаете об этом. Если вы сделаете это на уровне операционной системы, вы быстро исчерпаете ресурсы, что означает не только передачу сообщений, но и пул, который должен быть встроен в архитектуру. Виртуальная машина Эрланга в этом отношении немного сложна. Конечно, не каждая проблема требует миллионов параллельных процессов.
zxq9 1.10.2014 10:52:56
13 ОТВЕТОВ
РЕШЕНИЕ

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

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

Другим интересным решением проблемы параллельного программирования является 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.08.2008 13:08:51

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

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

7
22.08.2008 12:27:27

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

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

7
22.08.2008 12:45:04

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

6
22.08.2008 12:46:57

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

3
22.08.2008 14:13:05

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

6
22.08.2008 14:15:46

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

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

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

15
10.09.2008 15:40:53

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

4
8.11.2008 03:37:46

Внимание: бесстыдная вилка!

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

Volker

3
2.02.2009 06:10:38

Если вы используете 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 VM. Reia - это новый проект создателя Revactor: Tony Arcieri.

4
9.06.2009 16:29:40

Не готовый к выпуску ответ Microsoft Эрлангу : Microsoft Axum

5
9.06.2009 16:40:23

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

3
22.10.2009 08:28:26

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

2
7.10.2011 21:26:07