【发布时间】:2016-05-28 14:10:18
【问题描述】:
我正在阅读有关 CPU 如何在多线程应用程序中保持其缓存一致性的信息。写入一个内核的缓存会将其标记为脏,所有其他内核必须小心不要从主内存读取该段,因为主内存副本不是最新的。
我编写的许多应用程序像一个actor系统一样工作,其可变性仅限于单个线程上的局部变量。我通常不会将它们标记为“线程本地”,除非我有这样做的语义原因。
但是,我是否错过了优化机会?是否将变量显式标记为线程本地,而不是仅以这种方式使用它,是否会通知硬件它不必检查一致性,因为该变量永远不会对其他线程可见,即使在原则上也是如此?
编辑:作为表达同一事物的更高级别的方式,我是否应该期望通过使用正式的演员系统(如 Akka)来获得性能提升,而不是仅仅在我的课程中坚持演员范式?正式的参与者系统增加了严格性、跨计算机扩展的能力以及可能的一些开销,但它是否也有助于低级细节,例如让线程跳过对已知非共享的缓存数据的一致性检查?
是否通过将数据标记为“线程本地”来做到这一点?
【问题讨论】:
标签: actor micro-optimization thread-local