当前位置: 首页 > news >正文

Shell Daily 2025-12-29: 并行加速 (Xargs Parallel)

Shell Daily 2025-12-29: 并行加速 (Xargs Parallel)

在处理大量任务时(比如压缩 1000 个日志文件或下载 50 个链接),很多人的直觉是写一个 for 循环。但这有个致命弱点:它是串行的。无论你的服务器有 8 核还是 64 核,for 循环一次只用一个核,剩下的性能都在睡大觉。

要释放多核 CPU 的潜能,你不需要学习复杂的编程并发库,只需要给老牌命令 xargs 加上一个参数。

怎么用

xargs 通常被用来把输入转换成参数,但它的 -P 参数可以让它并行启动多个进程。

  • 语法... | xargs -P <进程数> -I {} command {}
  • 参数-P 0 表示尽可能多地开启进程(慎用,可能耗尽资源),通常建议设置为 CPU 核心数。
  • 兼容性Linux (GNU) 和 macOS (BSD) 通用。(注:纯 POSIX 标准未定义 -P,但在现代系统中几乎标配)。

适用场景

  • 批量计算:图片转码、视频压缩、文件加密/解密。
  • 网络请求:并发检测多个 URL 的存活状态、并发下载。

示例 1:极速压缩日志

假设你有几百个切割好的日志文件 access.log.1, access.log.2 ... 用 gzip * 处理是串行的。如果改用 -P,速度将直接翻倍:

# -P 4:同时启动 4 个 gzip 进程进行压缩
# -n 1:每次传递 1 个文件名给 gzip
ls *.log | xargs -P 4 -n 1 gzip

示例 2:并发网络扫描

如果你有一个 domains.txt 列表,想检查哪些站点挂了。用 for 循环测完 100 个需要很久,用 xargs 可以瞬间完成:

# -I {}:定义替换占位符,把读到的域名填入 {} 位置
# -P 10:保持 10 个并发连接
cat domains.txt | xargs -P 10 -I {} sh -c 'curl -o /dev/null -s -w "%{http_code} {}\n" http://{} 
'

(注:使用 -P 时,输出可能会交错在一起。如果输出顺序很重要,这招就不适用了;但对于“只管执行,不管顺序”的批处理任务,它是当之无愧的神器。)

http://www.jsqmd.com/news/159619/

相关文章:

  • PyTorch模型推理batch size调优指南
  • 汽车发动机油制造流程哪家规范、服务质量哪家高? - mypinpai
  • PyTorch模型保存最佳实践:state_dict还是完整模型?
  • 硬盘的MBR
  • Part5.2D_Kalman_Filter_Example
  • SSH公钥认证配置:告别重复输入密码
  • Python编程实战营05:Python 标准输入输出语句详解
  • Anaconda更换默认镜像源为清华源教程
  • SSH X11转发显示PyTorch图形界面
  • 免费AI论文工具实测:8款神器将AIGC率从77%压至7%,高效完成初稿!
  • PyTorch混合精度训练AMP实战教程
  • 9个AI论文软件推荐,研究生轻松搞定学术写作!
  • Markdown emoji增强PyTorch博客可读性
  • PyTorch线性回归实战:从数据到模型完整流程
  • 性价比高的PET发泡机设备厂家有哪些、PET发泡机设备厂家用料扎实吗? - 工业品网
  • 2025年防火封堵材料公司推荐:福腾节能科技产品质量好 - myqiye
  • 告别传统电话订水!开源智慧送水系统源码,一键开启线上营收!
  • 【企业管理】企业关键角色多维深度特征分析
  • PyTorch DataLoader shuffle参数作用解析
  • 进程与程序
  • Part3.Step_by_Step_Derivation_of_Kalman_Gain
  • Git cherry-pick提取关键PyTorch修复提交
  • Spring Boot 校园综合服务
  • 进程的创建与终止
  • vivado hls对function函数做优化
  • 经典算法题型之排序算法(一)
  • Part4.Priori_or_Posteriori_Error_Covariance_Matrix
  • Part2.Data_Fusion,Covariance_Matrix,State_Space_Representation,Observation
  • PyTorch DataLoader worker_init_fn用途
  • Jupyter Notebook内联绘图设置plt.show()