Berücksichtigt die Task Parallel Library (oder PLINQ) andere Prozesse?

Insbesondere möchte ich TPL verwenden, um externe Prozesse zu starten (und auf sie zu warten). Prüft die TPL die Gesamtauslastung der Maschine (sowohl CPU als auch E / A), bevor sie sich entscheidet, eine andere Task zu starten (in meinem Fall also einen anderen externen Prozess)?

Beispielsweise

Ich habe ungefähr 100 Mediendateien, die codiert oder transcodiert werden müssen (z. B. von WAV nach FLAC oder von FLAC nach MP3). Die Codierung erfolgt durch Starten eines externen Prozesses (z. B. FLAC.EXE oder LAME.EXE). Jede Datei dauert ungefähr 30 Sekunden. Jeder Prozess ist größtenteils CPU-gebunden, aber es gibt einige I / O-Vorgänge. Ich habe 4 Kerne, daher werden im schlimmsten Fall (beim Umcodieren des Decoders in den Encoder) immer noch nur 2 Kerne verwendet. Ich würde gerne etwas machen wie:

Parallel.ForEach(sourceFiles,
    sourceFile =>
        TranscodeUsingPipedExternalProcesses(sourceFile));

Beginnen Sie damit 100 Aufgaben (und damit 200 externe Prozesse, die um die CPU konkurrieren)? Oder wird es sehen, dass die CPU ausgelastet ist und nur 2-3 gleichzeitig macht?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage