处理与 TBB 顺序处理的大型数据
processing large data that sequential with 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、...)的位置,值是要显示的数据。然后,当所有元素准备就绪时,您可以按所需的顺序输出结构。
这样你就不会关心哪个线程先完成。
相关文章:
- 如何实现高效的算法来计算大型数据集的多个不同值?
- 在 lldb 中为大型数据结构设置观察点
- 适用于频繁更改的大型数据集的最佳数据结构
- C/C++ 从 STM32 中的另一个类获取大型数据,如 180 数组
- 在大型数据集上执行时不返回 SQL
- 为什么Protobuf对大型数据结构不利
- 使用大型数据集初始化类成员向量的最有效方法
- 如何在Linux上快速地将大型数据从C 发送到Python
- 用于大型数据流的通货紧缩压缩算法
- CUDA:最大限度地减少大型数据类型的银行冲突
- 高速缓存行检索和在大型数据结构上的性能
- 发送大型数据时由对等方重置 Tcp 连接
- 存储和搜索大型数据集
- 使用固定指针将大型数据结构传递给非托管代码
- 将大型数据文件拆分为多个小文件(文本格式)
- 基于多个字段搜索大型数据集的有效方法
- 用于存储大型数据集的数据结构
- 仅从大型数据文件中读取/写入所需的数据,以最大程度地减少内存占用
- 非递归 Kosaraju 的两次传递算法实现需要很长时间才能在大型数据集上执行
- 有效地使用python对象来迭代调用python函数的大型数据集