2017-04-02 41 views
0

我有一个系统可能会在事务的生命周期中生成某些事件。每一次,我都需要更新数据库中的一行,并通过websocket发送一个UI事件。替代Akka顺序处理任务

一种选择我是执行在这样的演员避免任何锁定问题的事件处理(DB和UI) - 我也可以承受轻微的延迟,从而处理这个顺序将大大简化问题。

什么是处理这个Scala中,因为我觉得演员可能会在这种情况下是矫枉过正的替代方式? 有些博客指出演员应该用于“与状态并发” - 尽管我希望看到一个更合适的机制来消除此选项。

回答

0

最终使用演员的主要独特的好处是,让你避免竞争状态,他们都是伟大的封装可变的变量。

做你的描述,你可以只使用经典的线程。在你的(可能是简化的)描述中,我没有看到死锁的可能性。如果你想要一些更加可组合的东西,例如一系列异步任务,您可以使用Scala的Future

0

不能肯定这是否适用于斯卡拉,但有Groovy和Java的一个伟大的lib几个并发模型。我自己用Dataflow Concurrency取得了巨大的成功,可以推荐它作为一个轻量级但可管理的模型。

并发数据流提供了一种替代并发模型,这是 固有安全性和鲁棒性。它将重点放在数据和它们的流程上,而不是实际的流程 操纵数据。数据流算法使开发人员免于处理活锁,争用条件,并确保死锁 确定性,因此100%可重复性。如果你在测试中没有得到死锁 ,你将无法获得它们的生产。

链接GPars库中还有其他可用的模型。

我不会建议让丝扣自己,除非你有没有其他的选择。

附录

发布后我感兴趣的话题,并提出了一些搜索。看起来像Akka has direct support for Dataflow model也。或者至少有一些版本。

0

参与者避免锁定问题,因为他们使用队列进行交互。您可以使用具有(阻塞)队列的线程并获得相同的安全级别。演员对线程的唯一好处是演员不会为调用堆栈花费内存,因此我们可以在相同数量的核心内存中拥有比线程多得多的参与者。 actor模型的缺点是可以在单线程中实现的复杂算法需要多个参与者,因此参与者的实现可能会显得模糊。