我有一个构建脚本,它运行得非常慢,特别是在Solaris上.我希望通过在多个作业中运行来提高性能.我怎样才能做到这一点?
试试GNU Parallel,它很容易使用:
GNU parallel是一个shell工具,用于使用一台或多台计算机并行执行作业.作业可以是单个命令,也可以是必须为输入中的每一行运行的小脚本.典型的输入是文件列表,主机列表,用户列表,URL列表或表列表.作业也可以是从管道读取的命令.然后,GNU parallel可以拆分输入并将其并行输入命令.
如果今天使用xargs和tee,你会发现GNU parallel非常容易使用,因为GNU parallel被编写为具有与xargs相同的选项.如果你在shell中编写循环,你会发现GNU parallel可以替换大多数循环并通过并行运行多个作业使它们运行得更快.
GNU parallel确保命令的输出与您按顺序运行命令时的输出相同.这使得可以使用GNU parallel的输出作为其他程序的输入.
对于每行输入,GNU parallel将以行作为参数执行命令.如果没有给出命令,则执行输入行.几行将并行运行.GNU parallel通常可以用作xargs或cat的替代品 庆典.
你提到它是一个构建脚本.如果您使用命令行实用程序make,则可以使用make的-j<N>选项并行化构建:
GNU make知道如何一次执行多个配方.通常,make一次只执行一个配方,等待它在执行下一个配方之前完成.但是,' - j'或'--jobs'选项告诉make同时执行许多配方.
此外,还distcc可以使用它make来分发编译到多个主机:
export DISTCC_POTENTIAL_HOSTS='localhost red green blue'
cd ~/work/myproject;
make -j8 CC=distcc
Run Code Online (Sandbox Code Playgroud)