首页 理论教育 使用并行命令parallel来优化LinuxShell编程

使用并行命令parallel来优化LinuxShell编程

时间:2023-11-18 理论教育 版权反馈
【摘要】:服务器往往有多个CPU,要想让Linux命令使用所有的CPU内核,只要用GNU parallel命令,负载就会分配到各个CPU上,使得命令执行速度加快。下面举例说明关于parallel的应用。通过时间比较,基本说明了parallel的优点,但很难精确地说明快了多少倍,因为服务器上账户多、任务多,服务器不会单单被某一个账户专用。

使用并行命令parallel来优化LinuxShell编程

在工作中有时需要处理非常大的数据文件(几十GB,几百GB甚至更大),但处理数据的常用命令grep,wc,awk和sed等都是单线程的,只能使用一个CPU内核,这些命令在处理大数据时会比较慢。服务器往往有多个CPU,要想让Linux命令使用所有的CPU内核,只要用GNU parallel命令,负载就会分配到各个CPU上,使得命令执行速度加快。查看CPU相关信息的命令是mpstat,例如,在某台Linux服务器上运行该命令:

还可以通过查看文件/proc/cpuinfo获得CPU信息,例如,查看逻辑CPU的个数:

GNUparallel命令的下载与安装很简单,以下载20131122版本为例,步骤如下:

1)下载,运行命令wgethttp://ftpmirror.gnu.org/parallel/parallel-20131122.tar.bz2;或者在Windows中下载,网址为http://ftp.gnu.org/gnu/parallel/,然后复制到Linux里面;也可直接在Linux中用Web浏览器(如Firefox)下载,下载后默认存放在~/Downloads目录里。

2)解压缩,运行命令

3)运行

4)安装,如果是root账户,运行命令./configure && make && make install;如果是普通账户,运行命令./configure --prefix=$HOME && make && make install,然后确保~/bin目录在搜索路径里(即,运行PATH="$PATH:~/bin")。

下面举例说明关于parallel的应用。在某服务器上有一个经过压缩的大文件,看一下它的大小:

将它压缩为bz2文件的命令是cat wk45.bin|bzip2 --best>wk45.bz2,运行时间一定不短。为了计时,运行如下命令:

经过“漫长”的等待,命令结束,查看用时,用了32min43s的时间:

使用time命令,即运行time cat wk45.bin|bzip2 --best>wk45.bz2,像9.5节中的例子那样,也可以计时。

把压缩命令改为:cat wk45.bin|parallel --pipe --recend''-k bzip2 --best>wk45.bz2,计时命令不变,再查看用时,只用了4min6s的时间:(www.xing528.com)

确实快了很多。通过时间比较,基本说明了parallel的优点,但很难精确地说明快了多少倍,因为服务器上账户多、任务多,服务器不会单单被某一个账户专用。

下面看一个有关wc命令的例子。先要找到一个很多行的文件,也可以自己产生一个多行文件。例如,产生一个一百万行的文件num1000000:

在某台服务器上对一个一亿行的文件进行行数、单词数和字节数统计,并计时:

可见wc命令用时为19s。把命令改为:

计时命令不变,再查看用时,只用了6s的时间:

grep命令过滤某模式的命令为:

使用parallel时相应的命令为:

sed对某文件进行模式查找替换的命令为:

使用parallel时相应的命令为:

总之,在对大文件进行操作时感觉慢的话,可试着使用parallel命令。若想得到有关它的较详细讲解,可访问https://www.gnu.org/software/parallel/parallel_tutorial.html。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈