我有一个关键线程在紧密循环中处理数据。它具有亲和性,适用于高性能处理。它没有动态分配。
我有另一个线程在不同的内核上运行,它不执行任何关键工作,但执行动态分配。它也有亲和性。
执行动态分配的其他线程的存在是否会影响我的关键线程?
最佳答案
当然,是的。
不仅间接影响内存布局和 L3 垃圾回收,偶尔也会产生立竿见影的效果。
当调用 malloc 时,它会尝试重用已经分配和释放的内容,但有时必须扩展进程内存空间,它通过调用 mmap 或 brk.
我不是 100% 确定 brk,但是 mmap 肯定会使 TLB 无效,因此您应该预料到在这些调用之后处理页面错误的速度会变慢。
如果您使用的是 Linux 或 *BSD,您可以尝试摆弄内核代码以确保在所有情况下都不会无效,但不要指望它会很简单。
关于c++ - 不同线程上的动态分配会减慢我的主处理线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24334674/