Ich habe sehr begrenzte Kenntnisse über Erlang, aber soweit ich verstehe, kann es "Prozesse" mit sehr niedrigen Kosten hervorbringen.
Ich frage mich also, was sind diese "Prozesse" hinter den Kulissen?
Sind sie Fasern? Themen? Fortsetzungen?
Auch aus dem Erlang Dokument:
Erlang-Prozesse sind leicht (dynamisch wachsen und verkleinern) mit kleiner Speicherbedarf, schnell zu erstellen und beenden und die Planung der Aufwand ist niedrig.
Quelle: Ссылка
Vielleicht möchten Sie auch einen Blick darauf werfen:
Wenn über Erlang-Prozesse gesprochen wird, heißt es:
Erlang-Prozesse sind leichtgewichtig Fäden. Sie sind sehr günstig zu starten hoch und zerstören und sind sehr schnell zwischen da unter der Haube wechseln Sie sind einfach Funktionen. Ein typisches Erlang System läuft auf einem modernen Desktop-Computer kann zwischen wechseln viele Zehntausende solcher Prozesse. Prozesse werden alle paar geschaltet Dutzend Funktionsaufrufe, die macht schaltet weniger granular, speichert aber a normalerweise viel Zeit verschwendete Kontextwechsel.
Sie sind Lightweight-Prozesse .
Siehe auch meine Frage Technisch warum ist Prozesse in Erlang effizienter als OS-Threads .
Ich habe keine definitive Quelle gefunden, aber von dem, was ich verstehe:
Es gibt einen Scheduler (zB oder mehrere Scheduler, die agieren kooperativ), der bestimmt, welcher Erlang-Prozess auf welchem OS gestartet werden soll thread.
Diese Prozesse haben einen erweiterbaren Stack (vielleicht eine Präambel in jede Funktion, die den Stack bei Bedarf zuweist), so dass sie nicht konsumieren zu viel Speicher, es sei denn, sie benötigen es.
Sie geben dem Scheduler zurück, je nachdem, ob sie es sind warten auf Daten oder haben für eine ausreichende Zeit ausgeführt (vielleicht überprüft der Präambel-Code in einigen Funktionen, wie viel Zeit er hat ist abgelaufen). Im Gegensatz zu Threads werden sie nicht vorweggenommen?
Jeder Prozess weist Speicher von verschiedenen Seiten oder von a zu verschiedene Zuordnung, so ist es nicht möglich, Speicher zu teilen (in ähnlich wie OS-Prozesse vermeiden, Speicher zu teilen).
Vermutlich würde es auch hilfreich sein, wenn Sie separate Allokatoren oder Seiten pro Erlang-Prozess verwenden würden Garbage Collection, und in dem Fall, dass der Prozess endet, dann die Seiten können zurückgegeben werden, ohne dass eine Speicherbereinigung durchgeführt werden muss: Ссылка
Tags und Links multithreading concurrency erlang fiber