【发布时间】:2014-05-29 14:31:41
【问题描述】:
我有需要以并发方式更新的数据。此数据作为单例对象存在于 PlayFramework 中。在这种情况下会使用 AKKA 更好地更新这些数据,还是应该使用 STM?他们似乎都在做同样的事情,所以我想知道哪个更好。
这两种解决方案在共享状态并发方面有什么区别。
谢谢
【问题讨论】:
标签: scala concurrency playframework akka stm
我有需要以并发方式更新的数据。此数据作为单例对象存在于 PlayFramework 中。在这种情况下会使用 AKKA 更好地更新这些数据,还是应该使用 STM?他们似乎都在做同样的事情,所以我想知道哪个更好。
这两种解决方案在共享状态并发方面有什么区别。
谢谢
【问题讨论】:
标签: scala concurrency playframework akka stm
STM 允许独占写入,但允许多次读取,其中 Actor 一次只允许单个读取或写入。因此,当您处于希望多个线程同时读取共享状态并且此操作快速的情况下,STM 比 Actors 更适合。
【讨论】:
Play 是基于 Akka 构建的,因此您具有可以立即开始使用它的优势。演员之间没有共享数据。相反,数据(又名消息)从一个 Actor 传递到另一个 Actor。消息数据应该是不可变的,以进一步达到防止共享可变状态的目标。
您可以有一个单例参与者,它在内部保留任何状态以及通过“询问”请求(基于 Future)实现的对其的任何访问。因此,Actor 成为该单例数据的看门人,并通过消息传递系统强制对其进行串行访问。
我无法评论 STM,因此听起来可能有点偏见!
干杯,
【讨论】: