【发布时间】:2013-01-29 12:47:39
【问题描述】:
这是一个关于TPL Dataflow ProducerConsumer Pattern 的新问题,Svick 已经回答了。
- 我需要并行处理4个2gb的文件,需要逐个缓冲区读取文件内容缓冲区。 (这里使用生产者模式。Maxdegreeofparallelism = 4,我可以一次发布 4 个缓冲区)
- 需要处理缓冲区并写入中间表。 (此处使用消费者模式。)
- 内存中的数据表将根据业务规则进行转换并写入规范化表。
- 内存中的数据再次被重新用于对最终版本的数据进行更多验证。
目前,第 3 步和第 4 步未使用任何块。它通过消费者的顺序函数调用。
- 这个设计正确吗?
- 除了使用生产者消费者方法之外,还有什么方法可以将 4 个块逐个流水线并并行处理所有这些块?您能帮我提供一个小示例代码吗?
【问题讨论】:
-
您只有 4 个文件要处理吗?为什么选择生产者消费者模式?
-
一次我可能需要处理 4 到 8 个文件。我可能每天都会在预定的时间间隔内获得增量文件。生产者消费者模式主要用于排队和处理来自文件的记录缓冲区。
-
为什么要排队记录而不是在并行步骤 1 中处理它们?
-
@Balm- 一次处理一个文件。将 50 条记录读入缓冲区并移交给处理和转换。处理和转换将花费比阅读更长的时间。我试图在这里的每个阶段引入并行性。使用 bufferblock 并行读取“n”个记录缓冲区,并异步发送到操作块以进行“n”并行度的处理和转换。欢迎您提出宝贵建议。
-
好吧,我只是没想到写入中间表会花费更长的时间。那个中间表是什么?如果您使用的是 DataTables,那么请看一下 - 它们很慢!
标签: .net task-parallel-library tpl-dataflow