【发布时间】:2013-06-09 21:21:50
【问题描述】:
我目前有大约 15 个工作线程在 CPU 密集型循环中处理数据。每次确定结果时,都会获得一个 RW 锁,因此可以将结果存储在一个共享的 KV 结构(哈希表)中,键唯一。
由于花费了很多时间来获取锁,我正在探索不同的选项来提高性能。我玩过无锁哈希表(concurrent_unordered_map 和英特尔 TBB 无锁结构),但一直想知道让每个线程将其结果记录在单独的哈希表中,并且一旦所有线程完成,执行某种冲突解决。
冲突解决基本上是针对每个 [K1,V1], [K1,V2], .... [K1,Vn] 应该合并为 [K1,F(V1,V2,...Vn) ]。
我很好奇哪种数据结构最适合从其他结构迭代相同键的所有值。我确信必须有比单独迭代每个结构更好的东西。创建多图,批量添加单独的结构,然后解决冲突等?
【问题讨论】:
-
我假设在当前方法中,在每次插入之前都会进行唯一性测试。如果每个线程使用一个哈希表,您将如何维护唯一键?或者键是否自动都是唯一的?
-
密钥是正在处理的数据的派生属性,因此它已经存在。唯一性检查是这样的,结果可以按所述键分组。
标签: algorithm data-structures merge data-processing