Parallelize Bash-Skript mit maximaler Anzahl von Prozessen

Sagen wir, ich habe eine Schleife in Bash:

for foo in `some-command`
do
   do-something $foo
done

do-something ist CPU-gebunden und ich habe einen schönen glänzenden 4-Kern-Prozessor. Ich möchte in der Lage sein, bis zu 4 @ laufdo-something ist sofort.

Der naive Ansatz scheint zu sein:

for foo in `some-command`
do
   do-something $foo &
done

Dies wird ausgeführtall do-somethings auf einmal, aber es gibt ein paar Nachteile, vor allem, dass do-something auch einige signifikante I / O haben kann, die @ ausführall auf einmal könnte etwas langsamer werden. Das andere Problem besteht darin, dass dieser Codeblock sofort zurückgegeben wird, sodass keine andere Arbeit ausgeführt werden kann, wenn das gesamtedo-somethings sind fertig.

Wie würden Sie diese Schleife schreiben, so gibt es immer Xdo-somethings läuft sofort?

Antworten auf die Frage(32)

Ihre Antwort auf die Frage