【发布时间】:2021-11-30 14:02:33
【问题描述】:
假设在 C# 多线程编程中,我们有一个全局的共享类对象O。多个线程可以同时读取O 的各种只读字段(即不写,只读)。这会带来额外的开销,还是预期读取性能与单线程读取一样快?
【问题讨论】:
-
它是technically possible,在给定的场景中你必须非常不幸。一定要测量。
-
@HansPassant 我的知识共享开销只发生在写入,而不是读取,否则我会注意到它。你知道发生这种情况的任何架构吗?
-
您正在忽略另一种类型的静态变量,这些变量在内存中相邻,仍在同一缓存行中,并且被写入。您无法直接控制存储地址,因此不必担心它。仅当您测量到知道您遇到问题时才考虑填充。
-
但即使缓存行中有其他内容,读取仍然不会产生开销。只有写作会导致虚假分享问题。
标签: c# multithreading