首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用 parallel 利用起你的所有 CPU 资源

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

-- Elliot Cooper

本文导航

◈ 如何使用 parallel

17%

◈ 使用 parallel 来进行 JPEG 压缩

37%

◈ parallel 与 gzip 连用

69%

编译自 | https://bash-prompt.net/guides/parallell-bash/

作者 | Elliot Cooper

译者 | lujun9972

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

当我们的工作受制于 CPU 处理数据的速度时,这些未使用的 CPU 资源能产生很大的效用。这种情况在进行多媒体转换(比如图片和视频转换)以及数据压缩中经常遇到。

本文中,我们将会使用parallel

[1]

程序。parallel 会接受一个列表作为输入,然后在所有 CPU 核上并行地执行命令来处理该列表。Parallel 甚至会按顺序将结果输出到标准输出中,因此它可以用在管道中作为其他命令的标准输入。

如何使用 parallel

parallel 在标准输入中读取一个列表作为输入,然后创建多个指定命令的进程来处理这个列表,其格式为:

这里的 list 可以由任何常见的 bash 命令创建,例如:、、。这些命令的结果通过管道从它们的标准输出传递到 parallel 的标准输入,像这样:

跟 中使用 类似, 使用 来表示输入列表中的每个元素。下面这个例子中, 会使用 压缩所有 命令输出的文件:

下面这些实际的使用 的例子可能会更容易理解一些。

使用 parallel 来进行 JPEG 压缩

在这个例子中,我收集了一些比较大的 文件(大约 10MB 大小),要用Mozilla

[2]

出品的 JPEG 图像压缩工具MozJPEG

[3]

来进行处理。该工具会在尝试保持图像质量的同时减少 JPEG 图像文件的大小。这对降低网页加载时间很重要。

下面是一个普通的 命令,用来找出当前目录中的所有 文件,然后通过 MozJPEG 包中提供的图像压缩工具 () 对其进行处理:

总共耗时 。该命令运行时的 看起来是这样的:

你可以看到,虽然有 8 个核可用,但实际只有单个线程在用单个核。

下面用 来运行相同的命令:

这次压缩所有图像的时间缩减到了 。从 显示中可以很清楚地看出不同:

所有 CPU 核都满负荷运行,有 8 个线程对应使用 8 个 CPU 核。

parallel 与 gzip 连用

如果你需要压缩多个文件而不是一个大文件,那么 就能用来提高处理速度。如果你需要压缩单个文件而同时又想要利用所有的 CPU 核的话,那么你应该 的多线程替代品pigz

[4]

首先,我用随机数据创建了 100 个大约 1GB 的文件:

然而我用 命令来进行压缩:

总共耗时 ,而且也是只利用了单核。

换成 版本:

耗时减少到了 。

parallel 是一款非常好用的工具,应该加入到你的系统管理工具包中,在合适的场合它能帮你节省大量的时间。

via:https://bash-prompt.net/guides/parallell-bash/

作者:Elliot Cooper

[6]

译者:lujun9972校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

LCTT 译者

lujun9972

共计翻译:35篇

贡献时间:30 天

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171229B0EFYH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券