Technisch gesehen, warum sind Prozesse in Erlang effizienter als Betriebssystem-Threads?

Erlang's Eigenschaften

VonErlang Programming (2009):

Erlang-Parallelität ist schnell und skalierbar. Seine Prozesse sind insofern unkompliziert, als die virtuelle Erlang-Maschine nicht für jeden erstellten Prozess einen Betriebssystem-Thread erstellt. Sie werden in der VM unabhängig vom zugrunde liegenden Betriebssystem erstellt, geplant und verarbeitet. Infolgedessen liegt die Prozesserstellungszeit in der Größenordnung von Mikrosekunden und ist unabhängig von der Anzahl der gleichzeitig vorhandenen Prozesse. Vergleichen Sie dies mit Java und C #, wo für jeden Prozess ein zugrunde liegender Betriebssystem-Thread erstellt wird: Sie erhalten einige sehr wettbewerbsfähige Vergleiche, wobei Erlang beide Sprachen deutlich übertriff

VonWährungsorientierte Programmierung in Erlang (pdf) (Folien) (2003):

Wir stellen fest, dass die Zeit für die Erstellung eines Erlang-Prozesses konstant 1µs bis zu 2.500 Prozessen beträgt. danach steigt sie für bis zu 30.000 Prozesse auf etwa 3 us an. Die Leistung von Java und C # wird oben in der Abbildung angezeigt. Für eine kleine Anzahl von Prozessen sind ca. 300µs erforderlich, um einen Prozess zu erstellen. Das Erstellen von mehr als zweitausend Prozessen ist unmöglich.

Wir sehen, dass für bis zu 30.000 Prozesse die Zeit zum Senden einer Nachricht zwischen zwei Erlang-Prozessen etwa 0,8 µs beträgt. Für C # dauert es ungefähr 50 µs pro Nachricht bis zur maximalen Anzahl von Prozessen (was ungefähr 1800 Prozessen entsprach). Java war noch schlimmer, bis zu 100 Prozesse dauerten es ungefähr 50µs pro Nachricht, danach stieg es schnell auf 10ms pro Nachricht an, als es ungefähr 1000 Java-Prozesse ga

Meine Gedanke

Ich verstehe technisch nicht ganz, warum Erlang-Prozesse beim Erzeugen neuer Prozesse so viel effizienter sind und einen viel geringeren Speicherbedarf pro Prozess aufweisen. Sowohl das Betriebssystem als auch die Erlang VM müssen die Zeitplanung durchführen, den Kontext wechseln und die Werte in den Registern verfolgen und so weiter ...

Einfach, warum werden Betriebssystem-Threads nicht auf die gleiche Weise implementiert wie Prozesse in Erlang? Müssen sie etwas mehr unterstützen? Und warum brauchen sie einen größeren Speicherbedarf? Und warum haben sie ein langsameres Laichen und eine langsamere Kommunikation?

Technisch gesehen, warum sind Prozesse in Erlang effizienter als Betriebssystem-Threads, wenn es um das Laichen und die Kommunikation geht? Und warum können Threads im Betriebssystem nicht auf dieselbe effiziente Weise implementiert und verwaltet werden? Und warum haben OS-Threads eine größere Speicherkapazität sowie ein langsameres Laichen und eine langsamere Kommunikatio

Mehr lesenInnerhalb der Erlang VMmit Schwerpunkt auf SMP (2008)Währung in Java und in Erlang (pdf) (2004)Leistungsmessungen von Threads in Java und Prozessen in Erlang (1998)

Antworten auf die Frage(14)

Ihre Antwort auf die Frage