Parallel.For количество потоков определяется во время выполнения или при компиляции?

Я читал, что количество потоков, созданных Parallel.For и Parallel.Foreach, зависит от количества ядер в компьютере, но это число определяется/вычисляется во время выполнения .exe или во время компиляции программы?

Например, если я скомпилирую на компьютере A, который создаст 4 потока, но затем выполню .exe на другом компьютере B с другим количеством ядер, создаст ли он 4 потока или количество потоков будет зависеть от количества ядра компьютера B?


person Carlos Siestrup    schedule 26.10.2015    source источник
comment
Он определяется во время выполнения, когда планировщик решает, сколько потоков выделить циклу.   -  person Ron Beyer    schedule 26.10.2015
comment
также прочитайте это stackoverflow.com/a/18943882/4767498   -  person M.kazem Akhgary    schedule 26.10.2015


Ответы (1)


В Parallel.For() нет никакой магии, это просто вызов метода, поэтому он компилируется в IL, который вызывает этот метод. Это означает, что количество используемых потоков не может быть определено во время компиляции.

Это также не зависит напрямую от количества ядер: вместо этого оно зависит от количества потоков, которые ему дает TaskScheduler. И TaskScheduler по умолчанию дает ему столько потоков из ThreadPool, сколько есть ядер, пока ничто другое не использует ThreadPool.

person svick    schedule 24.04.2016