2010-05-31 11 views
6

Wie funktionieren Nachrichtenschleifen in Erlang, sind sie synchronisiert, wenn es um die Verarbeitung von Nachrichten geht?Erlang Nachrichtenschleifen

Soweit ich verstehe, beginnt die Schleife durch "Empfangen" eine Nachricht und dann etwas durchführen und eine andere Iteration der Schleife zu treffen.

Also das muss synchronisiert werden? Recht?

Wenn mehrere Clients Nachrichten an dieselbe Nachrichtenschleife senden, werden alle diese Nachrichten nacheinander in die Warteschlange gestellt und ausgeführt, oder?

Um mehrere Nachrichten parallel zu verarbeiten, müssten Sie mehrere Nachrichtenschleifen in verschiedenen Prozessen erstellen, oder?

Oder habe ich alles falsch verstanden?

Antwort

9

Das Senden einer Nachricht erfolgt asynchron. Die Verarbeitung einer Nachricht erfolgt synchron - es wird jeweils eine Nachricht empfangen - da jeder Prozess seine eigene (und einzige) Mailbox hat.

4

Aus dem Handbuch (Erlang concurrency

Jeder Prozess für Nachrichten seine eigene Eingangswarteschlange wird. Neue Nachrichten empfangen erhält am Ende der Warteschlange gestellt. Wenn ein Prozess ein, die erste Nachricht empfangen führt in die Warteschlange wird mit dem ersten Muster im Empfang verglichen, wenn dies übereinstimmt, wird die Nachricht aus der Warteschlange entfernt und die Aktionen, die dem Muster entsprechen, werden ausgeführt
Wenn das erste Muster jedoch nicht übereinstimmt, ist das zweite Muster getestet, wenn dies zutrifft, wird die Nachricht aus der Warteschlange entfernt und die Aktionen, die dem zweiten Muster entsprechen, werden ausgeführt. Wenn das zweite Muster nicht mit dem übereinstimmt 3. wird versucht und so weiter, bis kein Muster mehr zu testen ist. Wenn keine weiteren Muster zu testen sind, wird die erste Nachricht in der Warteschlange gehalten und wir versuchen stattdessen die zweite Nachricht. Wenn dies mit einem Muster übereinstimmt, werden die entsprechenden Aktionen ausgeführt, und die zweite Nachricht wird aus der Warteschlange entfernt (wobei die erste Nachricht und alle anderen Nachrichten in der Warteschlange beibehalten werden). Wenn die zweite Nachricht nicht übereinstimmt, versuchen wir die dritte Nachricht und so weiter, bis wir das Ende der Warteschlange erreichen. Wenn das Ende der Warteschlange erreicht ist, blockiert der Prozess (stoppt die Ausführung) und wartet, bis eine neue Nachricht empfangen wird, und diese Prozedur wird wiederholt.
Natürlich ist die Erlang-Implementierung "clever" und minimiert die Häufigkeit, mit der jede Nachricht mit den Mustern in jedem Empfang verglichen wird.

So könnten Sie Prios mit der Regex erstellen, aber die Parallelität erfolgt über mehrere Prozesse.