Wie führe ich eine begrenzte Anzahl von Programminstanzen aus?

273
korasov

Zum Beispiel habe ich ca. 14000 Dateien, die ich bearbeiten muss. Jetzt mache ich es mit

for %%a in (*.OGG) do revorb.exe "%%a" 

Dies führt alle Revorbs nacheinander durch. Ich habe einen Quad-Prozessor, also möchte ich vier Instanzen gleichzeitig ausführen, jedoch nicht mehr als vier. ich habe es versucht

for %%a in (*.OGG) do start revorb.exe "%%a" 

und es verursachte BSOD. Gibt es eine andere Möglichkeit, vier Aufgaben parallel auszuführen?

0

1 Antwort auf die Frage

2
agtoever

Soweit ich weiß, kann dies nicht über die Befehlszeile oder das Stapelverarbeitungsprogramm in Windows ausgeführt werden. Dies liegt daran, dass Sie nicht über die Befehlszeile steuern können, welcher Kern einem bestimmten Job zugewiesen ist. Sie können dies nur tun, wenn bereits eine Anwendung ausgeführt wird . Die "richtige" Möglichkeit, verschiedene Kerne zu verwenden, ist die Anwendung oder das Programm, das die (prozessorintensive) Arbeit erledigt. Anwendungen verwenden Multithreading, um verschiedene Kerne gleichzeitig zu verwenden. Da Multithreading Code komplexer macht, implementieren nicht alle Anwendungen Multithreading.

Bei der Audio- / Video-Kodierung macht sich Multithreading wirklich bezahlt. In Ihrem Szenario besteht die "richtige" Möglichkeit zur Beschleunigung darin, alle Kerne für jede Datei mithilfe von Multithreading zu verwenden, anstatt mehrere Threads / Kerne für Instanzen des Programms zu verwenden und unterschiedliche Dateien zu kodieren .

Die richtige Lösung ist die Verwendung eines Encoders, der alle Kerne für jede von ihm codierte Datei verwendet . Zum Beispiel Libav oder Handbremse würden geeignete Werkzeuge für diese sein.

Starten Sie einfach manuell die Anzahl der gewünschten Instanzen und verwenden Sie eine Art von Benennungslogik, um zu steuern, welche Dateien von jeder Instanz ohne Duplizierung verarbeitet werden. fixer1234 vor 8 Jahren 0
Es gibt keine Möglichkeit zu wissen, wie das Betriebssystem (Windows) die Instanzen den Kernen zuordnet. Windows ordnet jede Instanz nicht immer einem anderen Kern zu. Sie könnten mehr Prozesse als Kerne starten, in der Hoffnung, dass Windows sie eventuell mehr oder weniger gleichmäßig über die Kerne verteilt. Dies führt jedoch zu einer Menge Task-Overhead. Also am Ende: Wenn Ihre Anwendung alle Kerne verwendet, während Sie jede Datei einzeln bearbeiten, werden alle Kerne optimal genutzt. agtoever vor 8 Jahren 1