【发布时间】:2014-08-11 15:34:05
【问题描述】:
我有一个关键线程在一个紧密的循环中处理数据。它具有亲和力,适用于高性能处理。它没有动态分配。
我有另一个线程在不同的核心上运行,它不做任何关键工作,但做动态分配。它也有亲和力。
执行动态分配的其他线程的存在会影响我的关键线程吗?
【问题讨论】:
-
不同的内核很可能会共享缓存,因此非关键线程可能会导致缓存未命中甚至thrashing。但任何其他过程也可以。
-
好点。我的猜测是动态分配的内存对缓存的影响比对象在堆栈上的影响更大。
-
此外,有时预测动态分配何时(以及在哪个线程上)实际发生并不明显。可能值得仔细检查关键线程是否实际上没有动态分配(例如写入时复制字符串)
-
两个线程仍然共享同一个堆。动态分配会导致堆碎片化,从而减慢分配/释放速度。
-
动态分配的必须在分配时锁定保护堆的全局锁,但如果您的关键线程没有争用该锁,则不应减慢速度。
标签: c++ multithreading performance low-latency