linux - GNU/Linux 命令行中的并行处理

标签 linux shell command-line parallel-processing cpu

一些 GNU/Linux 命令行程序(例如“oggenc”,以 ogg vorbis 格式编码音频)仅使用 CPU 所有内核中的一个。 问题是,在我的例子中,我有 4 个内核,程序只使用 1 个内核,使 CPU 工作在 25%(只有一个内核工作在 100%,但其他 3 个内核工作在 0%那个任务)。

是否可以强制为命令行程序使用更多内核?

对于某些类型的任务,如 zip、tar、oggenc 等,它会很棒。

PS:我找到了一个名为“parallel”的程序,但我没有实现如何让它正常工作......:(

最佳答案

使用 GNU Parallel,您可以:

parallel gzip ::: *
parallel opusenc {} {.}.opus ::: *.wav

GNU Parallel 是一个通用的并行器,可以很容易地在同一台机器或您可以通过 ssh 访问的多台机器上并行运行作业。

如果您有 32 个不同的作业要在 4 个 CPU 上运行,一个直接的并行化方法是在每个 CPU 上运行 8 个作业:

Simple scheduling

GNU Parallel 在一个进程完成时生成一个新进程 - 保持 CPU 处于事件状态,从而节省时间:

GNU Parallel scheduling

安装

出于安全原因,您应该使用包管理器安装 GNU Parallel,但如果 GNU Parallel 未打包用于您的发行版,您可以进行个人安装,这不需要 root 访问权限。这样做可以在 10 秒内完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

有关其他安装选项,请参阅 http://git.savannah.gnu.org/cgit/parallel.git/tree/README

了解更多

查看更多示例:http://www.gnu.org/software/parallel/man.html

观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

浏览教程:http://www.gnu.org/software/parallel/parallel_tutorial.html

注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel

关于linux - GNU/Linux 命令行中的并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44524480/

相关文章:

bash - Bash 命令行的片段?

linux - 如何将目录中所有文件的列表添加到文本文件中?

c++ - 如何解决pty master写slave读。主控写的数据主控也会读吗?

linux - TCP 连接和确认号

linux - 如何在 Linux 上将十六进制字符串转换为字节字符串

linux - 如何使用 ALSA 将音频时钟从属到系统时钟?

linux - 如何使 zsh `run-help` 忽略 `sudo` 并获得有关以下命令的帮助

linux - 这个导出某些内容的基本 shell 脚本有什么问题

linux - Shell 变量被视为命令

shell - 退出自定义启动shell脚本后,退出到默认启动shell?