Ich habe eine Weile die wachsende Sichtbarkeit funktionaler Programmiersprachen und -funktionen beobachtet. Ich habe sie untersucht und den Grund für die Berufung nicht gesehen.
Dann habe ich kürzlich Kevin Smiths "Basics of Erlang" -Präsentation bei Codemash besucht .
Ich habe die Präsentation genossen und festgestellt, dass viele Attribute der funktionalen Programmierung es viel einfacher machen, Threading- / Parallelitätsprobleme zu vermeiden. Ich verstehe, dass der Mangel an Status und Veränderlichkeit es mehreren Threads unmöglich macht, dieselben Daten zu ändern, aber Kevin sagte (wenn ich es richtig verstanden habe), dass die gesamte Kommunikation über Nachrichten erfolgt und die Nachrichten synchron verarbeitet werden (wiederum um Parallelitätsprobleme zu vermeiden).
Aber ich habe gelesen, dass Erlang in hoch skalierbaren Anwendungen verwendet wird (der ganze Grund, warum Ericsson es überhaupt erstellt hat). Wie kann es effizient sein, Tausende von Anfragen pro Sekunde zu bearbeiten, wenn alles als synchron verarbeitete Nachricht behandelt wird? Ist das nicht der Grund, warum wir uns der asynchronen Verarbeitung zugewandt haben, damit wir mehrere Betriebsthreads gleichzeitig ausführen und Skalierbarkeit erreichen können? Diese Architektur scheint zwar sicherer zu sein, ist jedoch in Bezug auf die Skalierbarkeit ein Rückschritt. Was vermisse ich?
Ich verstehe, dass die Entwickler von Erlang absichtlich die Unterstützung von Threading vermieden haben, um Parallelitätsprobleme zu vermeiden, aber ich dachte, dass Multithreading notwendig ist, um Skalierbarkeit zu erreichen.
Wie können funktionale Programmiersprachen von Natur aus threadsicher und dennoch skalierbar sein?