- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它.
5年前关闭。
Improve this question
我是 scala 和 Actor 世界的新手。
这是我到目前为止所学到的:
Scala 是函数式编程(不是纯粹的),人们建议不要在 scala 中使用可变状态。
但另一方面,有一个akka框架实现了actor模型。在玩 akka 的过程中,我意识到消息是不可变的,但是 Actor 的状态是可变的。所以,我需要在 Actor 内部指定“var”变量和可变集合。而且,对我来说,拥有可变状态对于 scala 来说并不自然。
那么,我的理解正确吗?
为什么人们在不可变的 Scala 语言中采用可变 Actor 模型?
最佳答案
这是一个有趣的观点,并且确实 Actor 与其他类似 Scala 的代码完全不同。
您可以将参与者视为具有锁、信号量等的线程的替代品。它是一种更直观、更高效的并发编程模型,因为可变状态总是封装在按顺序处理消息的参与者中。
它为构建更多功能抽象提供了坚实的基础。 Akka 团队制作了 akka-streams。 Spark 使用 akka 跨节点通信。 Future
s,该问题的另一个成功的功能替代方案本质上是流的一种特殊情况:只有一个元素的流,并且可以使用参与者来实现。
因此,人们使用 Actor 是因为通过让 Actor 相互发送消息而不是对流进行操作,可以更直观地解决一些问题。由于反对可变性的主要论据是它在并发上造成的完全困惑,而参与者正是解决了这个问题,我想拥有这种可变性是可以的。它们相当复杂,但并发的正确解决方案实际上就是这么复杂。
请注意,流可以说是模拟程序与其环境的任何交互的功能方式。例如。对于 GUI 开发,您可以将控件的所有触发事件作为流提供,折叠流本质上是创建一种管理程序状态的方法。
关于scala - 如果scala提倡不变性,为什么它采用具有可变性的actor模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43304584/
我是一名优秀的程序员,十分优秀!