c++ - 不同线程上的动态分配会减慢我的主处理线程吗?

标签 c++ multithreading performance low-latency

我有一个关键线程在紧密循环中处理数据。它具有亲和性,适用于高性能处理。它没有动态分配。

我有另一个线程在不同的内核上运行,它不执行任何关键工作,但执行动态分配。它也有亲和性。

执行动态分配的其他线程的存在是否会影响我的关键线程?

最佳答案

当然,是的。
不仅间接影响内存布局和 L3 垃圾回收,偶尔也会产生立竿见影的效果。
当调用 malloc 时,它会尝试重用已经分配和释放的内容,但有时必须扩展进程内存空间,它通过调用 mmapbrk.
我不是 100% 确定 brk,但是 mmap 肯定会使 TLB 无效,因此您应该预料到在这些调用之后处理页面错误的速度会变慢。
如果您使用的是 Linux 或 *BSD,您可以尝试摆弄内核代码以确保在所有情况下都不会无效,但不要指望它会很简单。

关于c++ - 不同线程上的动态分配会减慢我的主处理线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24334674/

相关文章:

c++ - 在 OSX 上使用 QtCreator 调试失败

java - 安卓线程问题

sql-server - 如何在存储过程中设置锁?

打开“运行”菜单(尝试运行)时 Eclipse 崩溃

angular - 多个路由指向同一个 Angular 组件是否会影响性能?

mysql - 从大型 IEnumerable 获取计数

c++ - 无法在 clion 中运行任何程序

c++ - 两个 vector 的可迭代并集

c++ - 将 std::vector<char> 转换为 char* 会导致有缺陷的字符

performance - 各种范围查询对 Azure 表存储性能目标有何影响?