容量未命中是因为从缓存中丢弃块,因为缓存不能包含程序执行所需的所有块(程序工作集远大于缓存容量).
在组关联或直接映射块放置策略的情况下发生冲突未命中,当几个块被映射到同一组或块帧时发生冲突未命中; 也称为碰撞未命中或干扰未命中.
它们实际上是密切相关的吗?
例如,如果所有缓存行都已填满,并且我们对内存B有一个读取请求,我们必须驱逐内存A.
因为我们没有足够的空间,所以它应该被视为容量缺失吗?后来如果我们想要访问内存A,并且因为之前被驱逐,它被认为是冲突未命中.
我理解正确吗?谢谢
我在boost :: asio :: io_service :: run中遇到了一个奇怪的问题。有时,此run功能似乎占用了整个cpu(100%),有时却没有。我对这种模式不是很清楚。
相关代码:
class Asio {
public:
Asio() :
io_service_(new boost::asio::io_service),
run_() {}
void Start() {
if (!asio_thread_.joinable()) {
run_ = true;
asio_thread_ = std::thread([=] {
Run();
});
}
}
boost::asio::io_service* io_service() { return io_service_.get(); }
protected:
void Run() {
for (;;) {
boost::system::error_code ec;
io_service()->run(ec);
if (run_) {
io_service()->reset();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
} else {
break;
}
}
}
protected:
std::unique_ptr<boost::asio::io_service> io_service_;
std::thread asio_thread_;
std::atomic<bool> run_;
};
Run Code Online (Sandbox Code Playgroud)
当run函数正常运行时,下面是调用堆栈
#0 0x00000035f74e9163 in epoll_wait …Run Code Online (Sandbox Code Playgroud)