Подтвердить что ты не робот

Стиль Erlang Concurrency для других языков

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Ульф Вигер недавно опубликовал замечательную статью - вот те свойства, которые он задает, прежде чем вы сможете называть что-то "Erlang Style Concurrency":

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

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

Ответ 3

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

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

Ответ 4

Microsoft Concurrency и время выполнения координации для .NET.

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

Ответ 5

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

Ответ 6

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

Ответ 7

Microsoft Not-Production-Ready Ответ на Erlang: Microsoft Axum

Ответ 9

Termite для Gambit Scheme.

Ответ 10

Если вы используете 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: Тони Арьери.

Ответ 12

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

Ответ 13

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