Questions tagged «actor»

以无处不在的异步通信为特征的编程模型。

5
LMAX的破坏者模式如何工作?
我试图了解破坏者的模式。我已经看过InfoQ视频,并试图阅读他们的论文。我知道其中涉及一个环形缓冲区,它被初始化为一个非常大的数组,以利用缓存的局部性,消除新内存的分配。 听起来好像有一个或多个原子整数可以跟踪位置。每个“事件”似乎都有一个唯一的ID,并且可以通过找到相对于环大小等的模数来找到它在环中的位置。 不幸的是,我对它的工作方式没有直观的认识。我完成了许多交易应用程序,研究了参与者模型,研究了SEDA等。 他们在演讲中提到,这种模式基本上就是路由器的工作方式。但是我也没有找到关于路由器工作方式的任何好的描述。 是否有一些更好的解释的好指针?

5
Scala演员:接收与反应
首先让我说我有很多Java经验,但是直到最近才对函数式语言感兴趣。最近,我开始研究Scala,这似乎是一种非常不错的语言。 但是,我一直在Scala编程中阅读有关Scala的Actor框架的信息,有一件事我不理解。在30.4章中说,使用react代替receive可以重新使用线程,这对性能有好处,因为在JVM中线程很昂贵。 这是否意味着,只要我记得打电话react而不是receive,我就可以启动任意数量的Actor?在发现Scala之前,我一直在和Erlang一起玩,而Programming Erlang的作者自豪地介绍了20万个以上的过程而又不费吹灰之力。我讨厌用Java线程来做到这一点。与Erlang(和Java)相比,我在Scala中看到的是什么限制? 另外,该线程如何在Scala中重复使用?为了简单起见,我们假设我只有一个线程。我开始的所有参与者都将在该线程中按顺序运行,还是会进行某种任务切换?例如,如果我启动两个彼此进行乒乓球消息的演员,那么如果他们在同一线程中开始,是否会陷入僵局? 根据Scala编程的规定,编写要使用的演员比使用演员react困难receive。听起来似乎很合理,因为react没有回来。但是,本书继续说明了如何使用可以将react循环放入循环中Actor.loop。结果,您得到 loop { react { ... } } 在我看来,这与 while (true) { receive { ... } } 在本书的前面使用过。本书仍然指出,“实际上,程序至少需要几个receive”。那我在这里想念什么?除了回报之外还能receive做什么react?我为什么要在乎呢? 最后,进入我不了解的核心内容:这本书不断提到使用如何react使丢弃调用堆栈以重用线程成为可能。这是如何运作的?为什么有必要放弃调用堆栈?当函数通过抛出异常(react)终止而不能通过返回(receive)终止时,为什么不能丢弃调用堆栈呢? 我的印象是,Scala编程已经掩盖了这里的一些关键问题,这真是令人遗憾,因为否则它是一本真正优秀的书。

3
何时使用参与者代替诸如WebSphere MQ或Tibco Rendezvous之类的消息传递解决方案?
我已经阅读了以下问题和答案:哪些设计决策会偏爱Scala的Actors而不是JMS?。 通常,我们使用已经存在多年的消息传递解决方案:使用WebSphere MQ或Apache ActiveMQ之类的JMS实现进行点对点通信,或者使用Tibco Rendevous进行多播消息传递。 它们非常稳定,经过验证,并提供高可用性和高性能。但是,配置和设置似乎比Akka复杂得多。 在迄今已成功使用上述产品(WebSphere MQ或ActiveMQ)的某些用例中,何时以及为何使用Akka?为什么在我的未来项目中应该考虑使用Akka代替WebSphere MQ或Tibco RV? 我什么时候应该避免Akka?它是否提供与其他解决方案相同的高可用性和性能?还是将Akka与其他消息传递中间件进行比较是一个坏主意吗? 也许除了JMS(点对点),TibcoRV(多播)和Akka之外,我还应该考虑JVM环境中的另一种消息传递解决方案?
106 java  scala  jms  actor  akka 

3
Node.js事件系统与Akka的参与者模式有何不同?
我已经工作Node.js了一段时间,并认为自己在Java方面非常出色。但是我刚刚发现Akka并立即对其演员模式感兴趣(据我了解)。 现在,假设我的JavaScript技能与我的Scala / Java技能相当,那么我想专注于这两个系统的实用性。特别是在Web服务方面。 据我了解,Node非常擅长处理许多并发操作。我认为用于资产管理系统的良好Node Web服务将擅长处理许多同时提交更改的用户(在大型,繁忙的应用程序中)。 但是,在了解了Akka的演员之后,它似乎在同一件事上表现出色。我喜欢将工作减少到一口大小的想法。另外,几年前,我涉足了Erlang,并爱上了它使用的消息传递系统。 我在处理复杂业务逻辑的许多应用程序上工作,我想是时候该重拾一个了。特别是升级旧的Struts和C#应用程序。 无论如何,避免圣战,这两个系统在本质上有何不同?似乎两者都朝着相同的目标发展。也许Akka的“自我修复”架构具有优势。 编辑 看来我获得了接近的票数。请不要将此问题当作“哪个更好,节点还是akka?”。我要寻找的是事件驱动库(如Node)和基于参与者的库(如Akka)的根本区别。
93 node.js  events  akka  actor 



6
演员模型:为什么Erlang / OTP特别?你能用另一种语言吗?
我一直在研究Erlang / OTP,因此,一直在阅读(好的,略读一下)演员模型。 据我了解,参与者模型只是一组功能(在Erlang / OTP中称为“进程”的轻量级线程中运行),它们仅通过消息传递相互通信。 用C ++或任何其他语言实现这似乎微不足道: class BaseActor { std::queue<BaseMessage*> messages; CriticalSection messagecs; BaseMessage* Pop(); public: void Push(BaseMessage* message) { auto scopedlock = messagecs.AquireScopedLock(); messagecs.push(message); } virtual void ActorFn() = 0; virtual ~BaseActor() {} = 0; } 每个进程都是派生BaseActor的实例。Actor仅通过消息传递相互通信。(即推动)。参与者在初始化时向中心地图注册自己,该地图允许其他参与者找到他们,并允许中心功能贯穿他们。 现在,我知道我在这里遗漏了,或者更确切地说,是在掩盖一个重要问题,即:缺乏屈服意味着单个Actor可能不公平地消耗过多时间。但是跨平台协程是C ++中使这一点变得困难的主要因素吗?(例如,Windows具有纤维。) 我还有什么想念的吗,或者模型真的很明显吗?

3
Scala中的多个Actor实施有何不同?
随着Scala 2.9.0的发布,还宣布了Typesafe Stack,它结合了Scala语言和Akka框架。现在,尽管Scala在其标准库中有参与者,但Akka使用其自己的实现。而且,如果我们寻找其他实现,我们还将发现Lift和Scalaz也具有实现! 那么,这些实现之间有什么区别?
76 scala  actor  akka 


13
有很好的Actors for C#实现吗?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 5年前关闭。 改善这个问题 .net / c#是否有任何好的Actor并发模型实现? 我必须优化ac#例程,并且我认为参与者模型非常适合作为我的问题的解决方案。不幸的是,我只有scala实现方面的经验。
75 c#  .net  concurrency  actor 


3
如果引发异常,Akka Actor不会终止
我目前正在尝试开始使用Akka,并且遇到了一个奇怪的问题。我的演员有以下代码: class AkkaWorkerFT extends Actor { def receive = { case Work(n, c) if n < 0 => throw new Exception("Negative number") case Work(n, c) => self reply n.isProbablePrime(c); } } 这就是我开始工作的方式: val workers = Vector.fill(nrOfWorkers)(actorOf[AkkaWorkerFT].start()); val router = Routing.loadBalancerActor(SmallestMailboxFirstIterator(workers)).start() 这就是我关闭所有内容的方式: futures.foreach( _.await ) router ! Broadcast(PoisonPill) router ! PoisonPill …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.