【发布时间】:2012-08-14 18:35:05
【问题描述】:
据我了解,Plinq 决定打开多少线程(每个线程位于不同内核的线程上) 按核心数。
__________
Core 1
Core 2
Core 3
Core 4
___________
所以,如果我有一个 Plinq 任务可以找到所有前 1000 个素数,
Plink 将打开一个新的Thread on each Core 以最大限度地提高效率。
所以在这里,每个核心将运行在 1000/4 个数字上,即查找素数的逻辑。
但是我读到像IO 这样的阻塞操作应该与WithDegreeOfParallelism 一起使用,这样cpu 就不会认为这是一个密集的cpu 操作,并且它允许使用more 线程而不是@ 987654326@.
问题:
1) 准确吗?我理解正确吗?
2)如果我设置WithDegreeOfParallelism (7),那么它肯定会使用所有 4 个内核,但是其他 3 个呢? (7-4) 他们会跑到哪里去?在哪个核心/秒上?
【问题讨论】:
-
您可能还想查看 WithExecutionMode。如果 IO 是使并行性成为可能的唯一因素,那么这增加了在检查查询时 plinq 错误调用是否比仅串行处理更好的可能性。相反,如果 plinq 决定,它也有可能是正确的,因此无论有无都值得处理。