阅读 Extensible Concurrency with the Sync and Send Traits 后,我对标记特征 Sync
有疑问.
Java 的“synchronize”意味着blocking,所以我很困惑一个Rust struct 实现了Sync
,其方法在多个线程上执行,如何有效。
我进行了搜索,但没有找到有意义的答案。我是这样考虑的:每个线程都会同步(阻塞)获取结构的引用,但并行调用方法,是这样吗?
最佳答案
Java:通过此代码路径时,从多个线程访问此对象成为一个同步操作序列。
Rust:通过来自多个线程的引用同步访问此类型是安全的。
(以上两点都不是规范的定义,它们只是演示如何在句子中使用相似的词来获得不同的含义)
synchronized
在运行时作为互斥锁实现。 Sync
是关于特定类型的运行时属性的编译时 promise ,允许其他类型通过特征边界依赖于这些属性。 Mutex
恰好是提供Sync
行为的一种方式。不可变类型通常也提供这种行为而无需任何运行时成本。
通常,您不应依赖在不同上下文中具有完全相同含义的词。 Java IO 流 != java 集合流 != RxJava react 流 ~= tokio Stream。 C volatile != java volatile 。等等等等 最终,散文比只是简写的关键字更重要。
关于performance - 对同步的性能影响感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49082618/