Следующий PHP-код возвращает мне время выполнения около 3,5 секунд (измеряется несколько раз и усредняется):
$starttime = microtime(true);
exec('/usr/local/bin/convert 1.pdf -density 200 -quality 85% 1.jpg');
$endtime = microtime(true);
$time_taken = $endtime-$starttime;
Когда я запускаю ту же команду через ssh-терминал, время выполнения сокращается примерно до 0,6 секунды (измеряется с помощью инструмента командной строки time
).
Версия библиотеки imagemagick
Version: ImageMagick 6.7.0-10 2012-12-18 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP
В чем причина этой разницы во времени?
Один из ответов на аналогичный вопрос здесь, в stackoverflow, заключался в том, что накладные расходы возникают из-за того, что веб-сервер должен запустить thread/shell. Неужели это действительно причина? Я думал, что потоки левого веса и не занимают много времени, чтобы начать/прекратить работу.
До вызова exec
я устанавливаю количество потоков, используемых imagemagick (поскольку это было/является ошибкой в OpenMP?, Ссылка) на 1 с помощью exec('env MAGICK_THREAD_LIMIT=1');
. Время выполнения из PHP мало меняет, независимо от того, какое значение я установил для MAGICK_THREAD_LIMIT
. Во всяком случае, в этой версии, похоже, нет ошибки в OpenMP, потому что время выполнения командной строки в порядке.
Приветствуются любые предложения о том, как я мог улучшить время выполнения вышеуказанной команды.
Большое спасибо за вашу помощь.