并行批处理是什么
几千个小文件要压缩、转码或上传时,串行处理的时间大多消耗在等待 IO 上。文件查找命令配合批量执行工具的并行参数可以同时跑多个任务,配合参数个数控制与空字符分隔,兼顾正确性与速度。调参顺序是先小批量试跑,观察负载后再逐步放大。
基本信息
| 场景 | 大批文件并行处理 |
|---|---|
| 组合 | 查找输出空字符分隔,批量执行工具按分隔符读取并并行 |
| 调参 | 并行度从核数起步,观察负载后调整 |
| 前提 | 每个任务独立,可重复执行且输出目标互不冲突 |
典型使用场景
- 批量压缩或转码:图片、视频、日志分片处理,把等待时间压缩到并行度分之一
- 并行下载上传:配合限流参数控制并发,避免打满带宽或触发对方限流
- 批量校验:对海量文件计算校验值,多核并行显著缩短时间
- 批量转换:格式转换与编码统一等计算密集任务按核数并行
- 分批试跑:先取一部分文件验证命令,确认无误后再全量执行
并行压缩与限并发下载
并行压缩与限并发下载
find /data/img -type f -name '*.png' -print0 | xargs -0 -n 1 -P 4 optipng -quiet
seq 1 200 | xargs -P 8 -I{} curl -sf -o /dev/null 'http://api.internal/item/{}'
nproc # 先看核数,并行度从它起步
find /data/img -type f -name '*.png' | head -20 | tr '\n' '\0' | xargs -0 -n1 -P2 optipng -quiet关键参数
| 参数 | 作用 | 注意 |
|---|---|---|
| 空字符模式 | 用空字符分隔输入项 | 配合查找命令的空字符输出,容忍文件名中的空格 |
| 单参数模式 | 每次只传一个参数 | 按文件逐个处理时必加 |
| 并行数 | 同时运行的进程数量 | 从核数量级起步,观察负载再调整 |
| 占位替换 | 在指定位置插入参数 | 需要拼参数位置时使用,并行效率会下降 |
| 空输入保护 | 输入为空时不执行 | 避免空输入下命令被误跑一次 |
| 分隔符 | 指定输入分隔字符 | 默认按空白与换行切分,含空格的文件名会出错 |
批量执行工具直接执行命令而不经过 shell,更安全也更省开销;只有需要管道或重定向时才包一层 shell。
并行度不是越大越好:磁盘、网络或锁竞争会把收益吃掉,甚至因为进程切换开销而更慢。
并行任务必须保证输出目标互不冲突,写同一个文件会互相覆盖或交错损坏。