Inwiefern verhindert Erlang die Rennbedingungen bei gleichzeitiger Programmierung?

11

Das Lesen über Parallelität in Erlang erinnert mich an das Akka-Toolkit für Parallelität . Beide bieten Ihnen Werkzeuge, um Rennbedingungen zu verhindern oder zu begrenzen . Mit dem immer noch unsicheren Akka-Toolkit können Sie jedoch Links zu veränderlichen Daten an andere Prozesse senden. Ich sehe Akka als nützliches Werkzeug, aber es bietet keinen Schutz vor unzulässigem Zugriff auf Objekte und Daten, was zu Rennbedingungen, Deadlock und / oder Hunger führt. Es hindert Sie nicht daran, unsicheren Code so zu schreiben, wie Java oder C # Sie davor schützt, die meisten Arten von Speicherlecks zu schreiben, die Sie in C ++ schreiben können (Sie können in Java immer noch Speicherlecks erstellen, indem Sie den Garbage Collector austricksen, aber es ist weniger ein Problem, als daran denken zu müssen, jedes von Ihnen zugewiesene Byte freizugeben).

Garantiert Erlang ein gewisses Maß an Korrektheit, Leistung und Robustheit bei der gleichzeitigen Programmierung? Ich denke, Betriebssysteme bieten Schutz beim Zugriff auf Systemressourcen (vorausgesetzt, die Treiberschreiber haben ihre Arbeit gut gemacht). ACID-Datenbanken bieten Schutz für Lesevorgänge und Aktualisierungen. Es scheint also, dass dies ein lösbares Problem ist. Oder würde eine generische sichere Lösung die durch die Parallelität erzielten Leistungssteigerungen auslöschen? Bieten andere Sprachen oder Toolkits die Art von gleichzeitiger Sicherheit, die Erlang bietet (oder nicht)?

Dies ist eine Folgefrage zu @ Malfists Kommentar zu @ user1249s Antwort auf Welche Programmiersprache erzeugt die wenigsten schwer zu findenden Fehler? .

GlenPeterson
quelle

Antworten:

19

Es gibt ein paar Dinge, die Erlang tut, um dabei zu helfen.

  • Daten sind unveränderlich, daher rasen keine Daten
  • OTP gen_servers und gen_fsm bieten ein sehr gut getestetes Muster für Server
  • Supervisor ermöglichen die Wiederherstellung nach Abstürzen
  • Prozesse sind klein und billig
  • Der Speicher wird pro Prozess zugewiesen (kein GC friert ein)
  • Die erlang VM ist für den Einsatz unter sehr hohen Lasten optimiert
  • Die Software kann im laufenden Betrieb aktualisiert werden, sodass keine Ausfallzeiten für Upgrades erforderlich sind

Das Wichtigste dabei ist, dass es in Erlang keinen gemeinsamen Status gibt, für den eine Sperre erforderlich sein könnte, sodass keine Sperren erforderlich sind. Es ist eine brillante Sprache für weiche Echtzeitanwendungen, die keine Ausfallzeiten und hohe Fehlertoleranz und Parallelität benötigen

Zachary K.
quelle
12
@JarrodRoberson: Eigentlich ist der Hauptpunkt kein gemeinsamer veränderlicher Zustand . Der Freigabestatus ist kein Problem, wenn Sie ihn nicht mutieren. Der veränderbare Zustand ist kein Problem, wenn Sie ihn nicht teilen.
Jörg W Mittag
1
Es gibt auch ein neues Tool Concuerror youtube.com/watch?v=FpkjKN9wTKg, mit dem Sie Ihre Tests mit allen möglichen Ereignisreihenfolgen ausführen können
Zachary K