微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果scala主张不变性为什么它采用具有可变性质的演员模型?

我是斯卡拉和演员界的新人.

这是我到目前为止所学到的:

Scala函数式编程(不是纯粹的),人们建议不要在scala中使用可变状态.

但另一方面,有一个实现actor模型的akka​​框架.在玩akka期间,我意识到消息是不可变的,但是MUTABLE中的演员状态.所以,我需要在actor中指定“var”变量和可变集合.并且,对我来说,拥有一个可变状态对于scala来说并不自然.

那么,我的理解是否正确?
为什么人们在不变的scala语言中采用了可变的actor模型?

解决方法

这是一个有趣的观点,实际上演员与其他类似Scala的代码完全不同.

您可以将actor视为具有锁,信号量和其余部分的线程的替代品.它是一种更直观,更高效的并发编程模型,因为可变状态总是封装在一个按顺序处理消息的actor中.

它为构建更多功能抽象提供了坚实的基础. Akka团队制作了akka-streams. Spark正在使用akka跨节点进行通信.期货是问题的另一个成功的功能替代方案,本质上是流的一个特例:只有一个元素的流,可以使用actor实现.

因此,人们使用actor是因为通过让演员互相发送消息而不是使用流上的操作来更直观地解决某些问题.由于反对可变性的主要论点是它在并发上创造的完全混乱,并且演员解决了这个问题,我想可以有这种可变性.它们相当复杂,但正确的并发解决方案实际上是复杂的.

简而言之,流可以说是模拟程序与其环境的任何交互的功能方式.例如.对于GUI开发,您可以将所有触发的控件事件作为流提供,折叠流实际上是创建一种管理程序状态的方法.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐