我有一个需要处理的文件来源。从每个文件中,我的代码生成可变数量的数据对象,我们称它为 N。我有 K 个处理对象,可用于处理 N 个数据对象。
我正在考虑使用 Tbb:dataflow 执行以下操作:
- 创建一个并发K的function_node并将我的K个处理对象放入concurrent_queue。
- 使用 input_node 读取文件,生成 N 个数据对象,并将每个数据对象 try_put 放入 function_node。
- function_node 主体将处理对象出列,使用它来处理数据对象,然后在完成后将处理对象返回给 concurrent_queue。
我能想到的另一种方式可能是这样的:
- 创建一个具有串行并发性的 function_node。
- 使用 input_node 读取文件,生成 N 个数据对象,将数据对象放入一个集合并发送到 function_node。
- 在 function_node 处,将 N 个对象划分为 K 个范围,并使用 K 个处理对象中的每一个来同时处理每个范围 - 不确定是否可以为此目的自定义 parallel_for。
第一种方法的优点可能是延迟较低,因为我可以在数据对象生成的那一刻开始通过数据流发送数据对象,而不必等待所有 N 个数据对象都生成。
您认为并行处理此处理的最佳方法是什么?