c++ - 一组互斥任务的线程级并行性

标签 c++ multithreading parallel-processing

我在使用 C++ 处理流数据时遇到了问题。数据以条目的形式出现,每个条目的大小相对较小,处理每个条目的任务不会花费太多时间。但是每个条目,以及处理该条目的任务,都被分配给一个(一个概念,而不是 C++ 类),其中属于同一类的任务中只有一个可以在同一时间执行时间。

此外,还有数十亿词条和千万类,词条随机分类。

我发现很难并行处理这些任务。任何关于如何加快该过程的建议都会有很大帮助!

非常感谢!

最佳答案

将工作条目放入一组特定于类的工作队列中。使用队列大小作为优先级,较大的队列优先于较小的队列。设置priority queue (队列的)根据其大小作为优先级来保存类特定的工作队列。

如果没有人在处理该队列,则工作条目将进入相应的队列。

设置一个与您拥有的 CPU 数量大致相同大小的线程池。

每个线程都向优先级队列请求最高优先级的工作队列,可以说这是拥有最多工作的队列。该线程从优先级队列中移除类队列。然后它处理该队列中的所有元素,而不锁定它;这使得每单位的开销很小。

如果该类(class)的新成员同时出现,他们将被添加到该类(class)的新队列中,但不会放入优先级队列中。工作线程用完当前队列,检查是否存在同一类的新队列并处理该队列(如果存在)。

关于c++ - 一组互斥任务的线程级并行性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311799/

相关文章:

c++ - 在 MPI、C++ 中发送动态数组

c++ - 我能保证 Sleep() 不会休眠超过 10 毫秒吗?

c++ - 如何将两个 HICON 合二为一

java intstream并行循环省略数据

c++ - 并行骑士之旅算法

c++ - C++ 中的 typedef 变量

c++ - 无法让 boost::thread 与 MSVS2013 一起工作

java - 同步语句——创建对象来提供锁,以便 c1 的更新不会与 c2 的更新交错

ios - NSOperation with NSTimer循环如何停止它

c++ - 传递 "shared"指针的 OpenMP 任务