Lets sagen, dass ich eine Schleife in Bash haben:parallelisieren Bash-Skript mit der maximalen Anzahl von Prozessen
for foo in `some-command`
do
do-something $foo
done
do-something
CPU gebunden ist, und ich habe einen schönen glänzenden 4-Core-Prozessor. Ich möchte in der Lage sein, bis zu 4 do-something
auf einmal zu laufen.
Der naive Ansatz scheint zu sein:
for foo in `some-command`
do
do-something $foo &
done
Diese alledo-something
s auf einmal laufen, aber es gibt ein paar Nachteile, vor allem, dass etwas tun-können auch einige bedeutende I/O haben die Durchführung alle auf einmal könnte etwas verlangsamen. Das andere Problem besteht darin, dass dieser Codeblock sofort zurückkehrt, so dass keine andere Arbeit ausgeführt werden kann, wenn alle do-something
s beendet sind. Wie würden Sie diese Schleife schreiben, so dass immer X do-something
s auf einmal läuft?
Als sidenode habe ich die Zugabe von Make Option -j auf den bas geträumt h für primitiv. Es würde nicht immer funktionieren, aber für einige einfache Fälle, wo Sie wissen, dass der Körper der Schleife für jede Iteration etwas Einzigartiges tun wird, wäre es ziemlich sauber, nur "für -j 4 ..." zu sagen. – unwind
Querverweis zu http://stackoverflow.com/questions/1537956/bash-limit-the-number-of-concurrent-jobs/1685440#1685440 für eine Bash-Lösung, die Leistungsprobleme mildert und Gruppen von Unterprozessen ermöglicht getrennt gehalten. – paxdiablo
Ich würde meine Lösung empfehlen http://Stackoverflow.com/a/28965927/340581 – Tuttle