我有一个关键线程,可以在紧密循环中处理数据。它具有亲和力,适用于高性能处理。它没有动态分配。
我有另一个运行在不同核心上的线程,它不执行任何关键工作但是会进行动态分配。它也是亲和力约束。
执行动态分配的其他线程是否会影响我的关键线程?
答案 0 :(得分:0)
当然,是的
不仅是内存布局和L3垃圾的间接影响,而且偶尔也会产生立竿见影的效果
当调用 malloc 时,它会尝试重用已经分配和释放的内容,但有时必须扩展进程内存空间,它通过调用 mmap 或 BRK 。
我不是100%确定 brk ,但是 mmap 肯定会使TLB失效,所以你应该期望在这些调用之后更慢地处理页面错误。
如果您使用的是Linux或* BSD,那么您可以尝试使用内核代码在所有情况下都不会失效,但不要指望它很简单。