我一直在比较 Scala 在并发编程方面相对于 Java 的优势。
显然我想到的第一点是Scala 是一种函数式编程语言(部分)使用 FP 自然地避免了副作用
与命令式语言相比,函数式编程如何避免副作用以及它如何在多线程/并发编程中工作?
我一直在比较 Scala 在并发编程方面相对于 Java 的优势。
显然我想到的第一点是Scala 是一种函数式编程语言(部分)使用 FP 自然地避免了副作用
与命令式语言相比,函数式编程如何避免副作用以及它如何在多线程/并发编程中工作?
我认为,这句话的意思是,Scala 作为一种函数式-OO混合语言鼓励(有时允许)你使用不会产生副作用的函数式构造和规则。您可以很好地编写具有副作用的非功能性有状态 Scala 代码;-) 另一方面,您可以尝试编写功能性 Java(例如),但由于函数不是第一类对象,因此它可能看起来很难看。所以我不会说它这样做很自然,但更像是在某些方面帮助你,并且总体上鼓励你这样做。
好吧,在进行函数式编程时,您应该坚持几个原则,结果不会给您带来任何副作用:
实际上,遵循上述规则避免副作用的最大好处之一就是更容易并发编程!毕竟,并发编程的最大障碍是管理共享状态!
由于其中一条规则是可变和共享状态不好,因此您不要使用它!相反,许多函数式语言(例如 Erlang 或 Scala)更喜欢所谓的 Actor 模型,其中 Actor(您可以将其与线程进行比较)仅通过相互发送消息进行通信(参见?传递值而不是将它们存储在某个地方!)。