Akka作为Clojure并发模型

6

看起来Akka框架有很多很酷的东西(我还不太理解这个框架,希望能尽快深入了解)。
在Clojure中使用Akka是被鼓励的吗?在Clojure项目中使用Akka作为并发模型并放弃内置设施是否有意义?

3个回答

13

Clojure内置了许多用于处理并发的支持。除非您确实需要使用actors,否则无需将actor库引入到您的项目中。由于您的问题没有详细说明系统的架构或设计,因此我无法确定是否需要在您的项目中使用actors,但我肯定不会立即采取这种方式。首先查看Clojure的代理和其他并发原语。它们应该可以很好地满足您的需求。

至于Akka(或任何actor库)作为Clojure的并发模型,这不是语言设计的方式。您可以选择为应用程序使用一个actor库,但这不是Clojure语言采用的方法。


3
Clojure没有分布式支持,对吧?那么如果你想要扩展到超过一台机器的规模,你在Clojure中应该如何处理? - Viktor Klang
有一个“Clojure的actors库,模仿Erlang OTP平台。”(而erlang是akka的灵感来源?)https://github.com/antoniogarrote/jobim和http://antoniogarrote.wordpress.com/2010/09/03/jobim-an-actors-library-for-clojure/ - jneira
12
没错,这里不支持分发。大多数时候人们认为他们需要分发,最终却陷入了演员混乱的困境,而他们真正需要的只是一个队列或其他简单的东西。虽然并非所有情况都如此,但这是普遍情况 :) - abedra
@Viktor - 在Clojure中有多种分发方式,它们只是在库中提供而不是核心语言。Zach Tellman的Aleph框架可能是最有趣的 - https://github.com/ztellman/aleph - mikera
6
当然,即使是Scala语言也没有内置分布式功能。 - Viktor Klang
现在在ClojureScript中,Aleph看起来是赢家,但是你仍然需要连接Aleph和本地的Clojure actors来模拟Akka所做的事情,但那只是一个非常薄的层... - matanster

4

这要取决于你的项目是否已经使用了内置设施。此外,这还要看你的公司/项目是否首先容忍这个想法,容忍库的许可条款,以及你/你的团队是否愿意接受社区支持或支付商业支持。

参见:

除此之外,对于您项目的开发人员而言,选择性编写代码的可维护性与标准工具设施、库的支持水平、库在Clojure软件开发社区中的接受程度等因素也很重要。
我的建议是评估并使用所有考虑的技术进行比较概念验证原型。
这种建议适用于向项目添加任何第三方代码时。
盲目接受他人的意见可能会浪费您大量的时间、精力、金钱和其他开发人员的支持。

请注意,我对Clojure或这个库并不了解,但我已经在多个项目/公司中宣传并成功使用第三方库。希望这可以帮到你 :) - Merlyn Morgan-Graham
这是有史以来最专业和务实的建议之一。 - Chiron

1

Pulsar项目为Clojure带来了轻量级线程、CSP和类似于Erlang的actors。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接