Erlang-Lektion
Erlang Prozesse und Message Passing erklaert
Erlang Prozesse sind leichte, isolierte Akteure. Sie teilen keinen Zustand so, wie viele es aus anderen Sprachen erwarten. Stattdessen senden sie Nachrichten. Genau diese Entscheidung veraendert das Denken ueber Nebenlaeufigkeit.
Warum Erlang-Prozesse anders wirken
Ein Erlang-Prozess ist nicht einfach nur ein kleiner Thread. Er ist eine getrennte Arbeitseinheit mit eigener Mailbox und eigener Zustandsgrenze. Ein Prozess kann also nicht heimlich den Zustand eines anderen aendern. Kommunikation wird explizit, weil der normale Weg nur ueber Nachrichten fuehrt.
Das ist einer der Hauptgruende, warum Erlang-Systeme unter Nebenlaeufigkeit so gut nachvollziehbar bleiben. Besitz bleibt lokal, Zusammenarbeit laeuft ueber Protokolle, versteckte Shared-State-Fehler werden seltener.
Was Message Passing dir bringt
Message Passing macht Grenzen sichtbar. Wenn ein Prozess Informationen will, muss er fragen. Wenn er Zustand veraendern moechte, muss er eine definierte Nachricht senden. So entstehen klarere APIs und sauberer Besitz.
Fuer Anfaenger ist das die richtige Denkweise: nicht einfach „viele Dinge gleichzeitig“, sondern „isolierte Akteure arbeiten ueber Nachrichten zusammen“. Wenn diese Idee sitzt, wirkt OTP spaeter viel logischer.
Pid = spawn(fun() -> loop(0) end).
Pid ! increment.
Pid ! {get, self()}.Wie ein Prozess-Loop funktioniert
Ein zustandsbehafteter Erlang-Prozess ist oft einfach eine rekursive Schleife um receive. Er wartet auf eine Nachricht, reagiert auf genau eine, aktualisiert bei Bedarf seinen lokalen Zustand und ruft sich wieder auf. Die Rekursion haelt den Prozess am Leben und macht den Zustandsuebergang explizit.
Das ist die Bruecke zwischen Rekursion und Nebenlaeufigkeit. Statt an eine while-Schleife ueber ein Objekt zu denken, denkst du an einen Prozess, der nacheinander Nachrichten verarbeitet und in den naechsten Zustand uebergeht.
Typische Fehler mit Prozessen
Ein haeufiger Fehler ist, Prozesse wie Objekte mit direktem Feldzugriff zu behandeln. Ein anderer ist, dem Aufrufer in Request-Response-Mustern nicht zu antworten. Ausserdem werden Nachrichten oft zu vage entworfen und ergeben dann kein stabiles Protokoll.
Die beste Korrektur ist, Nachrichtenformen klar zu designen. Nutze Tupel wie {get, From} oder {put, Key, Value}. Lege fest, was jede Nachricht bedeutet, welche Antwort erwartet wird und ob sich der Zustand danach aendert.
Was du als Naechstes ueben solltest
- Einen kleinen Loop fuer increment schreiben.
- Eine Nachricht {get, From} mit Antwort ergaenzen.
- In einem Satz sagen, welcher Prozess den Zustand besitzt.
- Danach mit OTP Basics weitermachen.
Hauefige Fragen
Teilen Erlang-Prozesse Zustand?
Nein. Normale Erlang-Prozesse teilen keinen veraenderbaren Zustand. Sie kommunizieren ueber Nachrichten.
Warum ist Message Passing nützlich?
Weil Besitz sichtbar bleibt, Protokolle klarer werden und viele klassische Shared-Memory-Probleme verschwinden.