处理按tbb顺序排列的大数据 我正在使用C++应用程序处理TBB的大量引用数据(如MSFT、AMZN等)。我想知道我将如何组织它。我一直在研究并行_和管道以及并发_队列

处理按tbb顺序排列的大数据 我正在使用C++应用程序处理TBB的大量引用数据(如MSFT、AMZN等)。我想知道我将如何组织它。我一直在研究并行_和管道以及并发_队列,c++,multithreading,multicore,intel,tbb,C++,Multithreading,Multicore,Intel,Tbb,这个过程基本上是解析数据,处理数据并输出到文件。解析和处理可以并行完成,但每个符号的输出应该是有序的 Eg. Input: - Msg #1 - AMZN #1 - Msg #2 - AMZN #2 - Msg #3 - IBM #1 - Msg #4 - AMZN #3 - Msg #5 - CSCO #1 - Msg $6 - IBM #2 例如,输入: -味精#1-氨锌#1 -味精#2-氨锌#2 -Msg#3-IBM#1 -味精4-氨锌3 -

这个过程基本上是解析数据,处理数据并输出到文件。解析和处理可以并行完成,但每个符号的输出应该是有序的

Eg. Input: - Msg #1 - AMZN #1 - Msg #2 - AMZN #2 - Msg #3 - IBM #1 - Msg #4 - AMZN #3 - Msg #5 - CSCO #1 - Msg $6 - IBM #2 例如,输入: -味精#1-氨锌#1 -味精#2-氨锌#2 -Msg#3-IBM#1 -味精4-氨锌3 -Msg#5-CSCO#1 -Msg$6-IBM#2 我想使用无锁解决方案或最小锁,但似乎我已经保持在并发队列中以保持顺序

任何想法都会有帮助

谢谢,
David

如果使用管道模式(
tbb::pipeline
类或
tbb::parallel_pipeline()
函数),则可以使用有序过滤器确保输出将以与接收到的输入完全相同的顺序出现。订购时,您的代码中不需要任何锁。

您的报价数据是否有时间戳或序列号

否则,从生产者线程添加一个序列号,并在解析后根据序列号对数据进行排序-然后可以批量或在写入文件之前进行重新排序。

您可以创建一个输出结构(哈希或列表),其中键是显示元素的位置(第一、第二、…)该值是要显示的数据。然后,当所有元素准备就绪时,您可以按所需顺序输出结构


这样,您就不必关心哪个线程先完成。

一些额外的细节可能会有所帮助。有多少数据(#GB)?你能在RAM中缓冲所有数据吗?这可以成批完成,还是您希望它实时工作?您关心多少符号?首先要检查的是,一个CPU不能跟上您的输入和输出速度。对于许多任务,处理数据的速度比将数据写入文件快得多。也就是说,不同引用之间的顺序重要吗?例如,在您的示例中,在AMZN#2之前输出IBM#1可以吗?