如何在并行的Bash中使用你的整个CPU
Posted 乌龟运维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在并行的Bash中使用你的整个CPU相关的知识,希望对你有一定的参考价值。
再不点蓝字关注,机会就要飞走了哦
当bash命令运行时,通常会在一个线程中运行。这意味着所有的处理工作都将在单个CPU上执行。随着CPU规模的扩大以及核心数量的增加,这意味着只有一小部分可用的CPU资源可以用于处理流程。
当我们试图完成的工作受到CPU处理数据的速度的约束时,这些未使用的CPU资源可能会产生很大的变化。这通常发生在媒体转换过程中,例如图片和视频以及数据压缩。
在本指南中,我们将看看使用bash程序Parallel。并行工作方式是接受一个列表作为输入,然后在该列表上的所有CPU核心上并行执行一个命令。Parallel甚至可以依次将任何输出发送到标准输出,因此可以将其作为标准输入传送给另一个命令。
如何使用并行
Parallel在stdin上把一个列表作为输入,然后用一个提供的命令创建一些进程,它的形式如下:
通过任何常规的bash命令的如可创建的列表cat
,grep
, find
。这些命令的结果是从它们的stdout传送到并行的stdin,例如:
就像使用-exec
与find
,parallel
替代输入列表中的每个成员{}
。在这里,parallel
将gzip find
输出的每个文件:
下面的例子parallel
将会使这个更容易理解。
使用并行JPEG优化
在这个例子中,我收集了大量.jpg
的〜10MB文件,并通过Mozilla生成的MozJPEG JPEG图像优化工具运行它们。此工具在尝试保留图像质量的同时减少了JPEG图像文件的大小。这对网站来说是非常重要的,以减少页面加载时间。
下面是一个典型的find
命令,用于查找.jpg
当前目录中的每个文件,然后通过MozJPEG包中提供的图像压缩工具运行它们cjpeg
:
这花了0m44.114s
几秒钟跑。这是top
运行时的样子:
如您所见,8个可用内核中只有一个在单线程上工作。
这里是与以下运行相同的命令parallel
:
这减少了优化所有图像的时间0m10.814s
。不同之处在于top
:所有的CPU内核都被最大化,并有8个线程来匹配8个可用的CPU内核。
与GZIP并行使用
如果你需要压缩一些文件,而不是一个大的文件,那么 parallel
会加快速度。如果您确实需要压缩一个文件,并且想要利用您的所有CPU核心,请查看多线程gzip
替换pigz。
首先,我在100个文件中创建了1GB的随机数据:
然后我使用另一个find -exec
命令压缩它们:
这需要0m28.028s
完成,并且只使用一个核心。
转换使用相同的命令parallel
给我们:
这减少了运行时间0m5.774s
。
并行是一个易于使用的工具,您应该添加到您的系统管理员工具包,因为它会在正确的情况下为您节省大量的时间。
乌龟运维
一起分享IT的点滴
长按上方二维码每天进步一小步
以上是关于如何在并行的Bash中使用你的整个CPU的主要内容,如果未能解决你的问题,请参考以下文章