小编Sle*_*Bos的帖子

Parallel.Invoke - 动态创建更多'线程'

我正在教自己Parallel.Invoke,以及一般的并行处理,用于当前项目.我需要向正确的方向努力,以了解如何根据需要动态\智能地分配更多并行"线程".

举个例子.假设您正在解析大型日志文件.这涉及从文件中读取,对返回的行进行某种解析,最后写入数据库.

所以对我来说,这是一个可以从并行处理中受益的典型问题.

作为简单的第一遍,以下代码实现了这一点.

Parallel.Invoke(
  ()=> readFileLinesToBuffer(),
  ()=> parseFileLinesFromBuffer(),
  ()=> updateResultsToDatabase()    
);
Run Code Online (Sandbox Code Playgroud)

在幕后

  1. readFileLinesToBuffer()读取每一行并存储到缓冲区.
  2. parseFileLinesFromBuffer出现并使用缓冲区中的行,然后让它们将它们放在另一个缓冲区中,以便updateResultsToDatabase()可以出现并使用此缓冲区.

因此,所显示的代码假定这三个步骤中的每一个都使用相同数量的时间\资源,但是假设parseFileLinesFromBuffer()是一个长时间运行的进程,所以不要只运行其中一个方法,而是要并行运行两个.

如何让代码根据它可能感知到的任何瓶颈智能地决定这样做?

从概念上讲,我可以看到一些监视缓冲区大小的方法是如何工作的,产生一个新的"线程"来以更高的速率使用缓冲区,例如......但我认为在将TPL库放在一起时已经考虑过这种类型的问题.

一些示例代码会很棒,但我真的只需要了解我接下来要调查的概念.看起来可能是System.Threading.Tasks.TaskScheduler持有密钥?

c# task-parallel-library

5
推荐指数
1
解决办法
1795
查看次数

标签 统计

c# ×1

task-parallel-library ×1