什么是缓存命中和缓存未命中?为什么上下文切换会导致缓存未命中?

Gee*_*eek 67 language-agnostic cpu concurrency cpu-architecture cpu-cache

从第11章(性能和可扩展性)和部分命名上下文切换的的JCIP书:

当切换新线程时,它所需的数据不太可能在本地处理器高速缓存中,因此上下文切换会导致一连串的高速缓存未命中,因此线程在首次调度时运行速度会慢一些.

  1. 有人可以用一种易于理解的方式解释缓存未命中的概念及其可能的相反(缓存命中)吗?
  2. 为什么上下文切换会导致大量缓存未命中?

Gra*_*ray 96

有人可以用一种易于理解的方式解释缓存未命中的概念及其可能的相反(缓存命中)吗?

缓存未命中通常是在缓存中查找某些内容并且未找到时 - 缓存不包含正在查找的项目.缓存命中是指您在缓存中查找内容并且它正在存储项目并且能够满足查询.

为什么上下文切换会导致大量缓存未命中?

在内存方面,每个处理器都有一个内存缓存 - 一小部分主内存的高速拷贝.当新线程被上下文切换到处理器时,本地高速缓存存储器为空或者不对应于线程所需的数据.这意味着由新线程进行的所有(或大多数)内存查找都会导致缓存未命中,因为它所需的数据不会存储在本地内存缓存中.然后硬件必须向存储器发出大量请求以填充本地存储器高速缓存,这导致线程最初运行得更慢.

  • 我只是说我不知道​​,你应该问另一个特别关于CDN如何处理缓存头的SO问题.我的答案是关于内部线程/处理器内存缓存. (4认同)
  • 我在这个问题中添加了第二部分. (3认同)

小智 5

每当处理器想要从主存中获取数据时,它首先会查看高速缓存缓冲区,看看缓冲区中是否存在相应的地址。如果存在,则使用缓存执行操作;无需从主存中获取。这称为“缓存命中”。

如果该地址不存在于高速缓存中,则称为“高速缓存未命中”。如果发生高速缓存未命中,则意味着处理器已转到主内存来获取地址,并且需要更多时间。