gpt4 book ai didi

scala - 为什么 Scala Actor 实现涉及同步代码?

转载 作者:行者123 更新时间:2023-12-04 06:27:35 25 4
gpt4 key购买 nike

我的理解是基于队列的并发方法可以在没有锁定的情况下实现。但是我在 Actor.scala 文件中看到了很多同步的关键字(查看 2.8.1)。是否同步,是否有必要,如果有一个未同步的实现会有所不同吗?

显然这个问题还不够清楚:我的理解是这可以通过非阻塞队列来实现。为什么没有这样做?为什么在这里的任何地方都使用 synchronized 关键字?可能有一个很好的理由,或者可能只是因为它是这样做的,而且没有必要。我只是好奇哪个。

最佳答案

关键是您在“act”方法中编写的 react 不需要关注同步。此外,假设您不公开参与者的状态,您的程序将是完全线程安全的。

那是不是 说根本没有同步:同步是绝对必要的 [1] 实现对参与者邮箱的读/写访问(即消息的发送和接收),并确保参与者的私有(private)状态在任何后续 react 中保持一致。

这是由库本身实现的,您作为用户无需关心它是如何完成的。您的状态是安全的(您甚至不需要使用 volatile 字段),因为 JMM 发生在保证之前。也就是说,如果主存写入发生在同步点之前,那么在同步之后发生的任何读取都会观察到写入留下的主存状态。

[1] - 通过“同步”,我的意思是一些机制来保证 Java 内存模型中的先发生关系。这包括 synchronized关键字,volatile修饰符和/或 java.util.concurrent锁定原语

关于scala - 为什么 Scala Actor 实现涉及同步代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5856934/

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