gpt4 book ai didi

scala - 如果scala提倡不变性,为什么它采用具有可变性的actor模型?

转载 作者:行者123 更新时间:2023-12-04 13:18:34 25 4
gpt4 key购买 nike

关闭。这个问题是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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com