我读过Parallel.For和Parallel.Foreach创建的线程数取决于计算机中的核心数,但这是在执行.exe期间决定/计算的数量,还是在程序编译时?
例如,如果我在计算机A中编译将创建4个线程,但随后在具有不同核心数的另一台计算机B中执行.exe,它将创建4个线程或将依赖于的线程数计算机B的核心数量?
答案 0 :(得分:1)
Parallel.For()
中没有魔法,它只是一个方法调用,因此它编译为调用该方法的IL。这意味着它在编译时无法确定它使用的线程数。
它也不直接依赖于核心数量:相反,它取决于TaskScheduler
给出的线程数。默认TaskScheduler
为ThreadPool
提供与核心一样多的线程,只要没有其他线程使用ThreadPool
。