假设我在 Bash 中有一个循环:
for foo in `some-command`
do
do-something $foo
done
do-something
是 CPU 绑定的,我有一个漂亮的4核处理器。我希望能够一次运行4个 do-something
。
这种天真的做法似乎是:
for foo in `some-command`
do
do-something $foo &
done
这将立即运行 所有 do-something
s,但是有一些缺点,主要是 do-something 可能还有一些重要的 I/O,一次执行 所有可能会稍微慢一点。另一个问题是,这个代码块会立即返回,所以当所有的 do-something
都完成时,就没有办法做其他工作了。
如何编写这个循环,以便始终有 X 个 do-something
同时运行?