我正在教自己Parallel.Invoke,以及一般的并行处理,用于当前项目.我需要向正确的方向努力,以了解如何根据需要动态\智能地分配更多并行"线程".
举个例子.假设您正在解析大型日志文件.这涉及从文件中读取,对返回的行进行某种解析,最后写入数据库.
所以对我来说,这是一个可以从并行处理中受益的典型问题.
作为简单的第一遍,以下代码实现了这一点.
Parallel.Invoke(
()=> readFileLinesToBuffer(),
()=> parseFileLinesFromBuffer(),
()=> updateResultsToDatabase()
);
Run Code Online (Sandbox Code Playgroud)
在幕后
因此,所显示的代码假定这三个步骤中的每一个都使用相同数量的时间\资源,但是假设parseFileLinesFromBuffer()是一个长时间运行的进程,所以不要只运行其中一个方法,而是要并行运行两个.
如何让代码根据它可能感知到的任何瓶颈智能地决定这样做?
从概念上讲,我可以看到一些监视缓冲区大小的方法是如何工作的,产生一个新的"线程"来以更高的速率使用缓冲区,例如......但我认为在将TPL库放在一起时已经考虑过这种类型的问题.
一些示例代码会很棒,但我真的只需要了解我接下来要调查的概念.看起来可能是System.Threading.Tasks.TaskScheduler持有密钥?