Сведения о вопросе

Drake

05:28, 9th August, 2020

Теги

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

Просмотров: 396   Ответов: 13

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

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



  Сведения об ответе

lesha

09:57, 10th August, 2020

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

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

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


  Сведения об ответе

prince

17:21, 15th August, 2020

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

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


  Сведения об ответе

PHPH

18:00, 15th August, 2020

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


  Сведения об ответе

LAST

18:00, 18th August, 2020

Microsoft Concurrency and Coordination Runtime for .NET.

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


  Сведения об ответе

padenie

20:31, 23rd August, 2020

Кроме того, kilim -это библиотека для java, которая позволяет передавать сообщения в стиле erlang / actors на язык Java.


  Сведения об ответе

прога

20:38, 18th August, 2020

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


  Сведения об ответе

DAAA

21:18, 7th August, 2020

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


  Сведения об ответе

FAriza

00:31, 21st August, 2020

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


  Сведения об ответе

P_S_S

04:44, 11th August, 2020

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

Revactor актер реализация модели для Ruby 1.9 построен на вершине библиотеки событие, высоких оборотов производительность. 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.


  Сведения об ответе

screen

07:45, 2nd August, 2020

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


  Сведения об ответе

VCe znayu

18:29, 8th August, 2020

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


  Сведения об ответе

lats

02:18, 16th August, 2020

Предупреждение: промоушен!

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

Волкер


  Сведения об ответе

lesha

17:30, 3rd August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться