In diesem Blogpost schreibt der Autor:
Grenchman baut jedoch auf den Core- und Async-Bibliotheken von Jane Street auf, einem der größten industriellen Anwender von OCaml. Async ermöglicht monadische Faux-Concurrency, die viele Callback-Probleme anderer ereignisgesteuerter Tools vermeidet, aber sie ist ziemlich monolithisch.
Auf der J Seite der Street-Dokumentation für Core Async beschreiben sie es als:
Insbesondere glauben wir, dass Async es besser macht, die Parallelität Ihres Programms zu kontrollieren, was es einfacher macht, über mögliche Rennbedingungen nachzudenken.
Meine Frage ist - gibt es Ähnlichkeiten zwischen core.async in Clojure und Core Async in OCaml? Ich frage, weil die 'faux concurrency, um Callback-Kopfschmerzen zu vermeiden' ziemlich ähnlich zu der Anwendung von core.async in Clojure klingt.
Ich kann keine großen Ähnlichkeiten erkennen. Das Konzept von Clojures core.async
scheint hauptsächlich auf dem Parallelitätsmodell von Go zu basieren - viele der Namen sind gleich, wie Kanäle für die Kommunikation und sogar das go
Makro für die asynchrone Ausführung von Code, wie Gos Schlüsselwort, das die Sprache selbst genannt wird für.
Das Konzept von Async von Jane Street ist in diesem Satz aus der einführenden Dokumentation : Kurz gesagt, besteht die Idee darin, nicht preemptive Threads auf Benutzerebene zu verwenden
und erstklassige Blockierungsoperationen mit Blockierung ausgedrückt in der
System eingeben. Er verwendet den speziellen Typ Bearbeiten : Nach einigen weiteren Untersuchungen besteht eine deutliche Ähnlichkeit darin, dass beide Bibliotheken sich darauf konzentrieren, mehrere Blockierungsoperationen zu kombinieren, ohne OS-Threads zu binden. Und Async bietet auch (neben
Deferred.t
, um Ergebnisse von asynchronen Berechnungen zu übermitteln, die Clojure-Futures ähnlicher sind als Kanälen. Außerdem werden OS-Threads komplett vermieden und stattdessen Benutzerthreads verwendet, während core.async
OS-Threads verwendet (zumindest wenn sie verfügbar sind). Deferred.t
) Kanäle über das Pipe
-Modul.
Tags und Links clojure asynchronous ocaml core.async clojurescript