【发布时间】:2021-07-10 18:17:24
【问题描述】:
当我 eg. 遍历一个链表并变得非常不走运时,我将有 ~ 0% 的缓存命中率(让我们假设无论如何)。为简单起见,我们还假设我有一个 CPU 一次只能运行一条指令(没有多核/超线程)。凉爽的。现在我的命中率为 0%,CPU/程序花费 99% 的时间等待数据。
问题:如果一个线程正在等待来自 RAM/磁盘的数据,那么该内核是否被阻塞了?或者我可以通过运行其他线程(或其他与增加命中率无关的方式)来利用低缓存命中率,而不是让 CPU 专门等待数据并执行其他工作吗?
【问题讨论】:
-
等待磁盘 -> 如果系统被编程为这样做/等待 RAM,则可以切换到其他线程 -> 我不确定,可能依赖于架构?
-
"...通过运行其他线程来利用低缓存命中率..." 因为缓存中充满了列表元素,所以第二个线程/任务将立即有 0% 的缓存命中率导致第三个线程/任务尝试启动....重复。同样在单核(线程)系统上,您需要协同多任务或硬件中断来激活内核线程来进行任务调度。
标签: c++ multithreading caching operating-system