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