【发布时间】:2008-09-01 16:47:53
【问题描述】:
假设我在 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
这将立即运行 all do-somethings,但有几个缺点,主要是 do-something 也可能有一些重要的 I/O 执行 all 一下子可能会慢一点。另一个问题是这个代码块是立即返回的,所以当所有的do-somethings都完成后,就没有办法做其他工作了。
您将如何编写此循环以使始终有 X 个do-somethings 同时运行?
【问题讨论】:
-
作为一个sidenode,我梦想将make的 -j 选项添加到原始的bash中。它并不总是有效,但对于一些简单的情况,你知道循环的主体将为每次迭代做一些独特的事情,只说“for -j 4 ...”会很干净。
-
交叉引用 stackoverflow.com/questions/1537956/… 以获得 bash 解决方案,该解决方案可缓解性能问题并允许将子进程组分开。
-
我会推荐我的解决方案stackoverflow.com/a/28965927/340581
标签: bash