处理与 TBB 顺序处理的大型数据



我正在开发c ++应用程序来处理大量报价数据,例如。(MSFT,AMZN等)与TBB。并且想知道我将如何构建它。我一直在研究parallel_for、管道和concurrent_queue。

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

例如。输入:    - 味精 #1 - AMZN #1    - 味精 #2 - AMZN #2    - Msg #3 - IBM #1    - 味精 #4 - AMZN #3    - 味精 #5 - CSCO #1    - 味精 6 美元 - IBM #2

我想使用无锁解决方案或最小锁定,但似乎我已经保持了concurrent_queue以保持订单。

任何想法都会有所帮助

谢谢大卫

如果使用管道模式(tbb::pipeline类或tbb::parallel_pipeline()函数),则可以使用有序筛选器来确保输出的显示顺序与接收输入的顺序完全相同。而且您不需要在代码中锁定任何锁即可进行排序。

您的报价数据是否有时间戳或序列号
否则,从生产者线程中添加序列号,并在解析数据后根据 squence 编号对数据进行排序 - 重新排序可以批量完成,也可以在写入文件之前完成。

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

这样你就不会关心哪个线程先完成。

最新更新