C# 并行。线程的数量由运行时或编译时决定?

C# 并行。线程的数量由运行时或编译时决定?,c#,multithreading,parallel-processing,parallel.foreach,parallel.for,C#,Multithreading,Parallel Processing,Parallel.foreach,Parallel.for,我读到Parallel.For和Parallel.Foreach创建的线程数取决于计算机中的内核数,但这个数是在执行.exe期间决定/计算的,还是在编译程序时决定/计算的 例如,如果我在计算机A中编译将创建4个线程,但在另一台具有不同内核数的计算机B中执行.exe,它将创建4个线程还是线程数将取决于计算机B的内核数?并行.For()

我读到Parallel.For和Parallel.Foreach创建的线程数取决于计算机中的内核数,但这个数是在执行.exe期间决定/计算的,还是在编译程序时决定/计算的


例如,如果我在计算机A中编译将创建4个线程,但在另一台具有不同内核数的计算机B中执行.exe,它将创建4个线程还是线程数将取决于计算机B的内核数?

并行.For()<,它只是一个方法调用,因此它编译为调用该方法的IL。这意味着它使用的线程数不能在编译时决定


它也不直接取决于内核的数量:而是取决于
TaskScheduler
提供给它的线程数量。默认的
TaskScheduler
给它的线程数量与
ThreadPool
中的线程数量相同,只要没有其他线程在使用
ThreadPool

它是在运行时由调度程序决定用于循环的线程数量时确定的。也请阅读此内容