【发布时间】:2021-07-06 08:05:26
【问题描述】:
我知道 std::queue 默认使用 std::deque 作为其内部容器。我找不到 TBB 的相同信息。
我有一个遗留的多线程应用程序,该应用程序当前使用围绕 std::queue
一种选择是摆脱链表并使用默认的 std::deque 作为内部容器,并从指向对象的指针切换到按值存储对象。分块分配的 std::deque 将在内存方面更好地扩展,因为没有。的元素增加。从缓存的角度来看,还有一些连续的元素会很有帮助。
另一个选项是使用 TBB 的 concurrent_bounded_queue。但是我没有足够的信息来知道将我的对象存储为值是否是一个可行的选择。
也欢迎任何替代建议。
【问题讨论】:
-
如果您可以按值存储对象,为什么您目前使用
void*? -
@JohnZwinck 正如我所提到的,它的遗留代码是我继承来优化的。
-
tbb::concurrent_bounded_queue 不是像 std::queue 这样的适配器
-
@SuhailKhan 那么你应该做的第一件事就是摆脱
void*。
标签: c++ stl tbb intel-oneapi stddeque