如何在并行的Bash中使用你的整个CPU

Posted 乌龟运维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在并行的Bash中使用你的整个CPU相关的知识,希望对你有一定的参考价值。

再不点蓝字关注,机会就要飞走了哦

当bash命令运行时,通常会在一个线程中运行。这意味着所有的处理工作都将在单个CPU上执行。随着CPU规模的扩大以及核心数量的增加,这意味着只有一小部分可用的CPU资源可以用于处理流程。

当我们试图完成的工作受到CPU处理数据的速度的约束时,这些未使用的CPU资源可能会产生很大的变化。这通常发生在媒体转换过程中,例如图片和视频以及数据压缩。

在本指南中,我们将看看使用bash程序Parallel并行工作方式是接受一个列表作为输入,然后在该列表上的所有CPU核心上并行执行一个命令。Parallel甚至可以依次将任何输出发送到标准输出,因此可以将其作为标准输入传送给另一个命令。

如何使用并行

Parallel在stdin上把一个列表作为输入,然后用一个提供的命令创建一些进程,它的形式如下:

如何在并行的Bash中使用你的整个CPU


通过任何常规的bash命令的如可创建的列表catgrep, find这些命令的结果是从它们的stdout传送到并行的stdin,例如:如何在并行的Bash中使用你的整个CPU

就像使用-execfindparallel替代输入列表中的每个成员{}在这里,parallel将gzip find输出的每个文件如何在并行的Bash中使用你的整个CPU

下面的例子parallel将会使这个更容易理解。

使用并行JPEG优化

在这个例子中,我收集了大量.jpg〜10MB文件,并通过Mozilla生成MozJPEG JPEG图像优化工具运行它们此工具在尝试保留图像质量的同时减少了JPEG图像文件的大小。这对网站来说是非常重要的,以减少页面加载时间。

下面是一个典型的find命令,用于查找.jpg当前目录中的每个文件,然后通过MozJPEG包中提供的图像压缩工具运行它们cjpeg

如何在并行的Bash中使用你的整个CPU

这花了0m44.114s几秒钟跑。这是top运行时的样子:如何在并行的Bash中使用你的整个CPU

如您所见,8个可用内核中只有一个在单线程上工作。

这里是与以下运行相同的命令parallel

如何在并行的Bash中使用你的整个CPU

这减少了优化所有图像的时间0m10.814s不同之处在于top如何在并行的Bash中使用你的整个CPU所有的CPU内核都被最大化,并有8个线程来匹配8个可用的CPU内核。

与GZIP并行使用

如果你需要压缩一些文件,而不是一个大的文件,那么 parallel会加快速度。如果您确实需要压缩一个文件,并且想要利用您的所有CPU核心,请查看多线程gzip替换pigz

首先,我在100个文件中创建了1GB的随机数据:

如何在并行的Bash中使用你的整个CPU

然后我使用另一个find -exec命令压缩它们

如何在并行的Bash中使用你的整个CPU

这需要0m28.028s完成,并且只使用一个核心。

转换使用相同的命令parallel给我们:

如何在并行的Bash中使用你的整个CPU

这减少了运行时间0m5.774s

并行是一个易于使用的工具,您应该添加到您的系统管理员工具包,因为它会在正确的情况下为您节省大量的时间。



乌龟运维

一起分享IT的点滴

长按上方二维码每天进步一小步



以上是关于如何在并行的Bash中使用你的整个CPU的主要内容,如果未能解决你的问题,请参考以下文章

Sublime Text自定制代码片段(Code Snippets)

如何计算bash中一列数据中的连续重复次数?

如何在bash终端中实现CTRL-R(反向搜索)?

1 个 cpu 设备上 OpenCL 的并行性

在 Bash 脚本中,如果发生某种情况,如何退出整个脚本?

用CPU来加速你的Linux命令