小编zeb*_*h49的帖子

并行处理比顺序处理慢?

编辑:对于将来偶然发现这一点的任何人:Imagemagick 使用 MP 库。如果有可用的核心,那么使用它们会更快,但如果您有并行作业,那就没有帮助了。

执行以下操作之一:

  • 串行完成您的工作(使用 Imagemagick 并行模式)
  • 设置 MAGICK_THREAD_LIMIT=1 来调用有问题的 imagemagick 二进制文件。

通过让 Imagemagick 仅使用一个线程,它在我的测试用例中减慢了 20-30%,但这意味着我可以在每个核心上运行一项作业而不会出现问题,从而显着提高性能的净值。

原问题:

在使用 ImageMagick 转换一些图像时,我注意到有些奇怪的效果。使用 xargs 比标准 for 循环慢得多。由于 xargs 仅限于单个进程,因此其行为应类似于 for 循环,因此我对此进行了测试,发现它大致相同。

于是,我们就有了这个演示。

  • 四核(AMD 速龙 X4,2.6GHz)
  • 完全在 tempfs 上工作(总共 16g ram;无交换)
  • 无其他主要负载

结果:

/media/ramdisk/img$ time for f in *.bmp; do echo $f ${f%bmp}png; done | xargs -n 2 -P 1 convert -auto-level

real        0m3.784s
user        0m2.240s
sys         0m0.230s
/media/ramdisk/img$ time for f in *.bmp; do echo $f ${f%bmp}png; done | xargs -n 2 …
Run Code Online (Sandbox Code Playgroud)

linux performance terminal imagemagick parallel-processing

5
推荐指数
1
解决办法
2093
查看次数