单线程的'gnu parallel'

3
这可能听起来有些矛盾,但是否有一种方法可以以简单的“串行”方式运行并行,而无需加载线程池?我使用并行作为比xargs更安全、更强大/功能更强的替代方法。
我面临的问题是,在一个已经并行化的代码块内,我想按顺序处理一堆参数(实际上这些工作非常简单,我的CPU已经运行到了100%)。
我知道“-P 1”选项,但似乎即使是这样,并行也会创建一个作业池(或其他东西),这实际上会带来相当大的开销。例子:
monarch:~/tests$ time ls -1 | xargs -n 1 -d $'\n' -I{} echo {} > /dev/null

real    0m1.084s
user    0m0.073s
sys     0m1.053s
monarch:~/tests$ time ls -1 | parallel -P1 'echo {} > /dev/null'

real    0m4.903s
user    0m2.235s
sys     0m3.046s

正如您所看到的,parallel 几乎增加了 400% 的开销。当然,这个例子是微不足道的,但我的实际用例并没有比这更复杂,而且我确实利用了 parallel 的字符串替换功能。

有没有更好的方法来完成我想做的事情?我想避免使用 for-loop/xargs,因为我需要重写那些字符串替换...

(我在 bash 中使用 parallel,如果有关系的话)


也许有人可以帮助您使用串行运行的简化工具实现您所需的“字符串替换功能”。您可以更新您的问题,说明您所寻求的字符串替换能力。 - TheCodeArtist
2
这听起来像是一个 XY 问题。你想要达成什么目的呢?为了并行,我会考虑“为什么不使用支持并行的脚本”——比如 Perl。 - Sobrique
抱歉上一条评论发送不完整。我的当前任务可能是XY,但我真的想知道如何最好地使用并行作为xargs的替代品。 - monarch_dodra
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接