Учитывает ли параллельная задача библиотека (или PLINQ) другие процессы?
В частности, я смотрю на использование TPL для запуска (и ожидания) внешних процессов. Проверяет ли TPL общую загрузку машины (как процессора, так и ввода-вывода), прежде чем принять решение о запуске другой задачи (следовательно, в моем случае - другого внешнего процесса)?
Например:
У меня есть около 100 мультимедийных файлов, которые необходимо кодировать или транскодировать (например, из WAV в FLAC или из FLAC в MP3). Кодирование выполняется путем запуска внешнего процесса (например, FLAC.EXE или LAME.EXE). Каждый файл занимает около 30 секунд. Каждый процесс в основном связан с процессором, но там есть некоторые операции ввода-вывода. У меня 4 ядра, поэтому в худшем случае (транскодирование путем передачи декодера в кодер) все еще используются только 2 ядра. Я хотел бы сделать что-то вроде:
Parallel.ForEach(sourceFiles,
sourceFile =>
TranscodeUsingPipedExternalProcesses(sourceFile));
Будет ли это запустить 100 задач (и, следовательно, 200 внешних процессов, конкурирующих за процессор)? Или он увидит, что процессор занят и делает только 2-3 за раз?