.NET 4… Параллельный. Вопрос ForEach ()

Я понимаю, что в новом TPL (Task Parallel Library) реализован Parallel.ForEach (), так что он работает с «выраженным параллелизмом». Это означает, что это не гарантирует, что ваши делегаты будут работать в нескольких потоках, а скорее он проверяет, имеет ли платформа хоста несколько ядер, и, если это правда, только тогда он распределяет работу по ядрам (по сути, 1 поток на ядро) .

Если хост-система не имеет нескольких ядер (становится все труднее и труднее найти такой компьютер), то она будет запускать ваш код последовательно, как в «обычном» цикле foreach. Довольно круто, откровенно говоря.

Обычно я бы сделал что-то вроде следующего, чтобы поместить мою длительную операцию в фоновый поток из ThreadPool:

ThreadPool.QueueUserWorkItem (new WaitCallback (targetMethod), new Object2PassIn ());

В ситуация, когда на главном компьютере есть только одно ядро, Parallel.ForEach () TPL автоматически размещает вызов в фоновом потоке? Или мне следует вручную вызывать любые вызовы TPL из фоновой thead, чтобы, если я выполняю с одноядерного компьютера, по крайней мере, эта логика будет отключена от потока диспетчеризации графического интерфейса пользователя?

Меня беспокоит, если я оставлю TPL ответственным. из всего этого я хочу убедиться, что он определяет, что это единственный основной блок, который по-прежнему маршалирует код, находящийся внутри цикла Parallel.ForEach (), в фоновый поток, как это сделал бы я, чтобы не блокировать мой графический интерфейс.

Спасибо за любые мысли или советы, которые могут у вас возникнуть ...

18
задан BonanzaDriver 5 January 2011 в 02:11
поделиться