Współbieżność w stylu Erlanga w innych językach

Jakie biblioteki istnieją dla innych języków programowania, aby zapewnić model współbieżności w stylu Erlanga(procesy, skrzynki pocztowe, odbiór dopasowujący wzorce itp.)?

Uwaga: szczególnie interesują mnie rzeczy, które mają być podobne do Erlanga, a nie zwykła biblioteka wątków lub kolejek.

Author: Kristopher Johnson, 2008-08-22

13 answers

Message Passing Interface (MPI) (http://www-unix.mcs.anl.gov/mpi/) jest wysoce skalowalną i solidną biblioteką do programowania równoległego, nastawioną oryginalnie na C, ale teraz dostępną w kilku smakach http://en.wikipedia.org/wiki/Message_Passing_Interface#Implementations . chociaż biblioteka nie wprowadza nowej składni, dostarcza protokół komunikacyjny do współdzielenia danych między funkcjami, które można równoległe.

Tradycyjnie stosuje się go w Duże obliczenia klastrowe zamiast na pojedynczym systemie współbieżności, chociaż systemy wielordzeniowe z pewnością mogą skorzystać z tej biblioteki.

Innym ciekawym rozwiązaniem problemu programowania równoległego jest OpenMP, który jest próbą dostarczenia przenośnego rozszerzenia na różnych platformach w celu dostarczenia kompilatorowi wskazówek na temat tego, które sekcje kodu są łatwo równoległe.

Na przykład ( 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;
}

Istnieją zalety i wady obu, oczywiście, ale te pierwsze okazały się niezwykle skuteczne w środowisku akademickim i innych ciężkich naukowych zastosowaniach obliczeniowych. YMMV.

 7
Author: jcsalterego,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 13:08:51

Ulf Wiger miał ostatnio świetny post na ten temat - oto właściwości, które definiuje jako wymagane, zanim można nazwać coś "współbieżnością w stylu Erlang":

  • Szybkie tworzenie/niszczenie procesów
  • zdolność do obsługi > > 10 000 równoległych procesów o zasadniczo niezmienionych cechach.
  • Szybkie asynchroniczne przekazywanie wiadomości.
  • Kopiowanie wiadomości-przekazywanie semantyki (współbieżność share-nothing).
  • monitorowanie procesu.
  • selektywne odbiór wiadomości.

Numer 2 powyżej jest najtrudniejszy do obsługi w maszynach wirtualnych i implementacjach językowych, które nie były początkowo zaprojektowane do współbieżności. Nie chodzi o to, aby wywalić implementacje współbieżności Erlanga w innych językach, ale wiele wartości Erlanga pochodzi z możliwości tworzenia milionów procesów, co jest cholernie trudne, jeśli abstrakcja procesu ma związek 1-1 z wątkiem lub procesem na poziomie systemu operacyjnego. Ulf ma o wiele więcej na ten temat w linku powyżej.

 14
Author: argv0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-10 15:40:53

Scala wspiera aktorów. Nie nazwałbym jednak Scali celowo podobną do Erlanga.

Mimo wszystko scala jest absolutnie warta obejrzenia!

 7
Author: Mo.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 12:45:04

Microsoft współbieżność i koordynacja Runtime dla. NET.

CCR jest odpowiedni dla model aplikacji, który oddziela elementy na kawałki, które mogą współdziałaj tylko poprzez wiadomości. Komponenty w tym modelu potrzebują środków do koordynować między wiadomościami, radzić sobie z złożone scenariusze awarii oraz skutecznie radzić sobie z asynchronicznymi programowanie.

 6
Author: Frank Krueger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 12:27:27

Również kilim jest biblioteką dla Javy, która przenosi do języka Java wiadomości w stylu erlang.

 6
Author: Mo.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 12:46:57

Mike Rettig stworzył bibliotekę. NET o nazwie Retlang oraz port Java o nazwie Jetlang, który jest zainspirowany modelem współbieżności Erlanga.

 5
Author: denis phillips,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 14:15:46

Odpowiedź Microsoftu na Erlanga: Microsoft Axum

 4
Author: HVS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 16:40:23

W Pythonie możesz spróbować użyć processing module .

 3
Author: cnu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 14:13:05

Termit dla systemu Gambitowego.

 3
Author: Doug Currie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-08 03:37:46

Jeśli używasz Ruby, spójrz na Revactor: [ http://revactor.org/][1]

Revactor jest implementacją modelu aktora dla Ruby 1.9 zbudowaną na bazie biblioteki zdarzeń wysokiej wydajności Rev. Revactor jest przeznaczony przede wszystkim do pisania usług i narzędzi sieciowych podobnych do Erlanga.

Spójrz na ten przykład kodu:

  myactor = Actor.spawn do
    Actor.receive do |filter|
      filter.when(:dog) { puts "I got a dog!" }
    end
  end

Revactor działa tylko na Ruby 1.9. Wydaje mi się, że autor biblioteki zaprzestał jej utrzymywania, ale dokumentacja na ich stronie jest bardzo dobrze.

Możesz również rzucić okiem na Reia: język skryptowy podobny do ruby zbudowany na maszynie wirtualnej Erlang. Reia to nowy projekt twórcy Revactor: Tony ' ego Arcieri.

 3
Author: luccastera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 16:29:40

Warning: shameless plug!

Opracowałem bibliotekę dla tego rodzaju wiadomości przekazywanych w Haskell: Erlang-styl rozproszony Haskell .

Volker

 2
Author: ShiDoiSi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-02 06:10:38

JoCaml rozszerza OCaml z join calculus do programowania współbieżnego i rozproszonego.

 2
Author: ygrek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 08:28:26
 1
Author: pondermatic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-07 21:26:07