Ich beobachte seit geraumer Zeit die wachsende Sichtbarkeit funktionaler Programmiersprachen und -funktionen. Ich habe sie mir angesehen und sehe den Grund für ihre Anziehungskraft nicht.
Vor Kurzem habe ich jedoch Kevin Smiths Präsentation "Grundlagen von Erlang" auf Codemash besucht.
Ich habe die Präsentation genossen und erfahren, dass viele der Eigenschaften funktionaler Programmierung es erleichtern, Thread-/Concurrency-Probleme zu vermeiden. Mir ist bekannt, dass das Fehlen von Zustand und Veränderbarkeit es unmöglich macht, dass mehrere Threads dieselben Daten ändern, aber Kevin sagte (wenn ich es richtig verstanden habe), dass alle Kommunikation über Nachrichten erfolgt und die Nachrichten synchron verarbeitet werden (auch hier werden Konflikte vermieden).
Aber ich habe gelesen, dass Erlang in hoch skalierbaren Anwendungen verwendet wird (der Hauptgrund, warum Ericsson es überhaupt erst erstellt hat). Wie kann es effizient sein, Tausende von Anfragen pro Sekunde zu verarbeiten, wenn alles als synchron verarbeitete Nachricht behandelt wird? Ist das nicht der Grund, warum wir begonnen haben, uns in Richtung asynchroner Verarbeitung zu bewegen - um den Vorteil zu nutzen, mehrere Threads gleichzeitig ausführen zu können und Skalierbarkeit zu erzielen? Es scheint, als ob diese Architektur, obwohl sicherer, einen Schritt rückwärts in Bezug auf Skalierbarkeit darstellt. Was übersehe ich?
Ich verstehe, dass die Schöpfer von Erlang bewusst vermieden haben, Multithreading zu unterstützen, um Konflikte zu vermeiden, aber ich dachte, dass Multithreading notwendig sei, um Skalierbarkeit zu erreichen.
Wie können funktionale Programmiersprachen von Natur aus threadsicher sein und dennoch skalieren?
1 Stimmen
[Not mentioned]: Erlangs' VM bringt Asynchronität auf eine andere Ebene. Durch Voodoo-Magie (asm) ermöglicht es synchrone Operationen wie socket:read zu blockieren, ohne einen Betriebssystem-Thread anzuhalten. Dies ermöglicht es Ihnen, synchronen Code zu schreiben, wenn andere Sprachen Sie in async-callback-Verschachtelungen zwingen würden. Es ist viel einfacher, eine skalierbare App mit dem Bild eines single-threaded Microservices im Kopf zu schreiben, anstatt jedes Mal das große Ganze im Blick zu behalten, wenn Sie etwas zum Code hinzufügen.
0 Stimmen
@Vans S Interessant.