2014-11-07 7 views
5

Ist core.async ein Ersatz für Lamina oder beabsichtigt es, ein Ersatz für Lamina zu werden?Clojure core.async und Lamina

Wenn nicht, gibt es klare Situationen, in denen der eine dem anderen vorzuziehen ist?

+0

Die vielen Varianten der Nebenläufigkeit in Clojure kann interessant sein - http://adambard.com/blog/clojure-concurrency-smorgasbord/ – edbond

+0

Ich sah das und obwohl es ein großartiger Artikel war, war es ein bisschen zu "nett" um meine Frage zu beantworten, denke ich. – shmish111

Antwort

13

Ich bin der Autor von Lamina. Ich denke, dass core.async eine gut gemachte Bibliothek ist, mit viel mehr Klarheit in ihrem Design als Lamina. Es gibt Dinge, von denen ich denke, dass Lamina besser ist, hauptsächlich in Bezug auf Introspektion, Leistung und Erweiterbarkeit.

Das große Problem, das ich mit core.async habe, ist, dass es zusätzlich zu einer Stream-Abstraktion ein Ausführungsmodell mitbringt (alles passiert in den core.async-Thread-Pools), was bedeutet, dass du es überall verwendest beschränkt das Design und die Implementierung von allem anderen in Ihrer Codebasis.

Ich habe eine Reihe von "async" -Bibliotheken gesehen, die Streams als core.async-Kanäle verfügbar machen. Dies bedeutet, dass Sie die Bibliotheken nur verwenden können, wenn Sie das Ausführungsmodell core.async verwenden.

Ich bin im Begriff, eine Bibliothek zu veröffentlichen, die versucht, eine "minimale" Stream-Darstellung zu sein, die anstelle von core.async, Lamina, Java blockierende Warteschlangen usw. Manifold genannt werden kann. Ein Manifold-Stream kann zu einem core.async-Kanal, Lamina-Channel usw. konvertiert werden, und alle diese Dinge können wieder in einen Manifold-Stream umgewandelt werden.

Ich denke, die "asynchrone" Landschaft ist noch ziemlich jung, und es gibt viele unerforschte Probleme w.r.t. wie gut die Abstraktionen skalieren, wie einfach sie in der Produktion debuggen und so weiter. Die JVM bietet viele Werkzeuge für die Introspektion, aber da die Async-Mechanismen ein komplett anderes Ausführungsmodell verwenden, beginnen wir grundsätzlich von vorne. Ich würde Ihnen nicht empfehlen, Lamina über core.async zu verwenden, aber ich würde darauf hinweisen, dass core.async eine Abstraktion auf Anwendungsebene ist, keine Bibliotheksebene.

+0

Vielen Dank dafür, immer am besten von den Autoren zu hören. Ich habe das nicht über core.async und eine gute Sache zu beachten. Ich werde das Begründung Dokument für Manifold lesen, aber es ist ein bisschen spät an einem Freitag jetzt :) – shmish111

+0

Manifold sieht gut aus, sicherlich, aber ich muss immer noch eine Entscheidung treffen. Es scheint jedoch, dass Lamina und core.async wahrscheinlich beide als verschiedene Strategien für das gleiche Endziel bleiben werden. Ich denke, ich werde mehr mit Lamina spielen, da es bereits in unserer Code-Basis ist, aber core.async hat mir erlaubt, einfach etwas in einen Go-Block zu verpacken und eine massive Leistungssteigerung zu sehen, ohne die Art, wie ich über diesen Teil denke, zu ändern Code. – shmish111

+0

Ich sehe jetzt, dass Lamina veraltet ist.Ich benutze Manifold im Moment für einen Kafka-Client, es scheint eine perfekte Lösung zu sein, weil ich eine einfache Bibliothek erstellen kann, die einen Stream zurückgibt und die Leute können sie so verwenden, wie sie wollen, als Kanal, Seq, vielfältiger Stream usw. Großartig (vorausgesetzt, es funktioniert :))! – shmish111

3

core.async und Lamina sind zwei verschiedene Projekte und sie sind nicht dazu gedacht, sich gegenseitig zu ersetzen. Eigentlich könnten sie gut zusammen spielen - wenn du willst.
Lamina ist ein Stream-orientierten Ansatz, während core.async Nachricht orientiert ist.

Welches zu verwenden ist Ihnen überlassen. In Lamina sind die Rückrufe wichtig, die Sie für den Kanal definieren, während in core.async Kanäle und go Blöcke entkoppelt sind, und dies ist flexibler und modularer.

+0

Ok, also würde ich mir vorstellen, dass die Entwickler von core.async denken würden, dass es ein besserer Weg ist, Dinge zu tun als Lamina, oder? – shmish111

+0

@ shmish111 Ich weiß nicht, besser, sie zu fragen :) Angesichts meiner Antwort, ich meine nicht core.async ist besser als Lamina – Chiron

+0

Ich sagte, dass, wie ich gerade Rich Chickys Rede über core.async beobachtet hatte;) – shmish111