我在使用 C++ 处理流数据时遇到了问题。数据以条目的形式出现,每个条目的大小相对较小,处理每个条目的任务不会花费太多时间。但是每个条目,以及处理该条目的任务,都被分配给一个类(一个概念,而不是 C++ 类),其中属于同一类的任务中只有一个可以在同一时间执行时间。
此外,还有数十亿词条和千万类,词条随机分类。
我发现很难并行处理这些任务。任何关于如何加快该过程的建议都会有很大帮助!
非常感谢!
最佳答案
将工作条目放入一组特定于类的工作队列中。使用队列大小作为优先级,较大的队列优先于较小的队列。设置priority queue (队列的)根据其大小作为优先级来保存类特定的工作队列。
如果没有人在处理该队列,则工作条目将进入相应的队列。
设置一个与您拥有的 CPU 数量大致相同大小的线程池。
每个线程都向优先级队列请求最高优先级的工作队列,可以说这是拥有最多工作的队列。该线程从优先级队列中移除类队列。然后它处理该队列中的所有元素,而不锁定它;这使得每单位的开销很小。
如果该类(class)的新成员同时出现,他们将被添加到该类(class)的新队列中,但不会放入优先级队列中。工作线程用完当前队列,检查是否存在同一类的新队列并处理该队列(如果存在)。
关于c++ - 一组互斥任务的线程级并行性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311799/