gpt4 book ai didi

java - 使用 gm4java 在单个进程中进行多个图像操作

转载 作者:行者123 更新时间:2023-11-30 08:23:11 30 4
gpt4 key购买 nike

这个问题是关于使用 gm4java 库与 Graphics Magick 交互(在 scala 中)。

我一直在测试 PooledGMService,因为它已被演示 here使用 scala,它运行良好。

但是,我注意到在 gm (gm batch batchfile.gm) 的命令行界面中,它的执行方式与批处理模式不同。当我从命令行运行带有任意数量图像的 gm 批处理文件时,它会启动 1 个 gm 进程。但是,如果我:

val config = new GMConnectionPoolConfig()
val service = new PooledGMService(config)

然后在 4 个线程之间共享服务实例,我在每个线程上对一个图像执行一些操作,例如:

service.execute(
"convert",
srcPath.toString(),
"-resize", percent + "%",
outPath.toString()
)

我看到创建了 4 个独立的 gm 进程。

我相信这会影响性能(使用上面提到的代码对 gm cli 和批处理文件进行 100 张图像的测试需要相同的时间,但我的 scala 代码使用 4 倍的 CPU)。

我的问题是:如何使用 gm4java 以便单个 gm 进程处理多个图像(或至少对同一图像进行几种转换),就像 cli 批处理模式一样?我用 no luck here 尝试了几次(有些非常愚蠢) .

我确切的 scala 代码,可以是 found here if you are curious .

2014 年 5 月 27 日更新

comment by gm4java's author的指导下我意识到我正在对两个不同的 gm 命令进行基准测试。更新后的基准测试结果是:

100 x 30MB images (3.09GB tot)
on i7 quadcore (8 logical cpu's w/ hyper-threading)

Criteria Time
gm cli batchfile 106s
my code 1 thread 112s
my code 4 threads 40s
my code 6 threads 31s
my code 7 threads 31s
my code 8 threads 28s

经过仔细检查,我还发现在我的代码运行时,具有相同进程 ID 的相同 gm 进程一直保持运行状态。这减轻了我对由于启动和终止 gm 线程相关的一些开销而导致性能下降的担忧。

改写

我想我的问题的核心是如何使 gm4java 尽可能快? tip about matching gm the threadcount with the machine's execution engine count很有用。还有什么想到的吗?

我的特定用例是将输入图像(平均为 30MB,偶尔为 50-60MB,很少为 100-500MB)调整为几个设定大小(缩略图是最重要和最高优先级的)。部署可能会在 amazon ec2 上进行有 7 或 14 个“计算单元”

最佳答案

PooledGMService的设计是通过启动多个 GM 进程实例以高度并发的方式处理您的图像处理请求,从而最大限度地利用您的计算机能力。 100 张图像的样本量太小,无法测试性能。如果您的目标是充分利用您的多 CPU 服务器来转换图像,您需要使用大量样本(至少几千个)进行测试并调整配置以找到要使用的并发 GM 进程的最佳数量。请参阅 GMConnectionPoolConfig 的文档对于所有配置选项。

如果您只有 8 个 CPU,则启动的 GM 进程不要超过 7 个。如果您在 2-CPU 笔记本电脑上进行测试,请不要运行超过 2 个 GM 进程。在示例中,您接受了所有默认配置设置,这将根据需要启动最多 8 个 GM 进程。但这并不是在只有 2 个 CPU 的笔记本电脑上处理 100 张图像的正确配置。

如果你只想模仿命令行批处理模式。比SimpleGMService是你最好的 friend 。查看使用模式here .

正确的解决方案在很大程度上取决于您的实际用例。如果您能告诉我们更多关于您想要实现的目标、您的硬件环境等,我们可以更好地为您提供帮助。

关于java - 使用 gm4java 在单个进程中进行多个图像操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23846193/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com