performance - 对同步的性能影响感到困惑

标签 performance rust synchronization

阅读 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/

相关文章:

android - 缩放到高分辨率时绘制位图很慢

c++ - unique_ptr vs 类实例作为成员变量

docker - 无法使用 Rust 可执行文件运行 Docker 镜像

rust - 如何正确使用 Rust 中的 IndexMut 特性?

azure - Windows 8/RT + Phone 8 应用程序 - 同步数据

java - 在数据库和 Hibernate 映射文件和 POJO 之间同步

mysql - 同步数据的最佳方式: MySQL -> SQL Server

javascript - 提高 JavaScript 中工厂模式的内存效率

c# - 如何监控特定应用程序的网络带宽使用情况?

rust - 使用 Serde 反序列化可能为空的字符串