Я тестировал PooledGMService, как это показано здесь, с помощью scala. , и он работает хорошо.
Однако я заметил, что он не работает так же, как пакетный режим в интерфейсе командной строки для gm (
Код: Выделить всё
gm batch batchfile.gm). Когда я запускаю пакетный файл GM из командной строки с любым количеством изображений, он запускает 1 процесс GM. Однако если я:
val config = new GMConnectionPoolConfig()
val service = new PooledGMService(config)
Код: Выделить всё
service.execute(
"convert",
srcPath.toString(),
"-resize", percent + "%",
outPath.toString()
)
Я считаю, что это влияет на производительность (тест с 100 изображений с упомянутым выше кодом по сравнению с gm cli с пакетным файлом занимают то же время, но мой код Scala использует в 4 раза больше ресурсов ЦП).
Мой вопрос это: как мне использовать gm4java, чтобы один процесс GM работает с несколькими изображениями (или, по крайней мере, с несколькими видами преобразований для одного и того же изображения), как и пакетный режим cli? Я предпринял несколько попыток (некоторые из них крайне глупые), но безуспешно.
Мой точный код Scala, если вам интересно, можно найти здесь.
обновление от 27.05.14
Под руководством комментария автора gm4java я понял что я тестировал две разные команды 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
Перефразирование
Думаю, суть моего вопроса в том, что сделать, чтобы gm4java работала как можно быстрее? Полезен совет о сопоставлении количества потоков с количеством механизмов выполнения машины. Есть ли что-нибудь еще, что приходит на ум?
Мой конкретный вариант использования — изменение размера входных изображений (в среднем 30 МБ, иногда 50–60 МБ и очень редко 100–500 МБ) несколько заданных размеров (миниатюры являются наиболее важными и приоритетными). Развертывание, вероятно, будет осуществляться на Amazon ec2 с 7 или 14 «вычислительными блоками»
Подробнее здесь: https://stackoverflow.com/questions/238 ... th-gm4java
Мобильная версия