gpt4 book ai didi

PHP exec() 性能

转载 作者:IT王子 更新时间:2023-10-29 00:11:58 26 4
gpt4 key购买 nike

以下 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 上对类似问题的一个回答是,开销来自必须启动线程/shell 的 Web 服务器。这真的是原因吗?我认为线程是轻量级的,根本不需要很长时间就可以启动/终止。

在调用 exec 之前,我使用 exec('env MAGICK_THREAD_LIMIT =1');。无论我为 MAGICK_THREAD_LIMIT 设置什么值,PHP 的运行时间都没有太大变化。无论如何,这个版本的 OpenMP 似乎没有错误,因为命令行执行的运行时间是可以的。

如果我能改进上述命令的运行时间,我将不胜感激。

非常感谢您的帮助。

最佳答案

当您通过键盘或通过 ssh 登录到 Unix 机器时,您会创建一个新的 shell 实例。 shell 通常类似于 /bin/sh/bin/bash。 shell 允许您执行命令。

当您使用 exec() 时,它还会创建一个新的 shell 实例。该实例执行您发送给它的命令,然后退出。

当您创建 shell 命令的新实例时,它有自己的环境变量。所以如果你这样做:

exec('env MAGICK_THREAD_LIMIT=1');
exec('/usr/local/bin/convert 1.pdf -density 200 -quality 85% 1.jpg');

然后您创建了两个 shell,第一个 shell 中的设置永远不会到达第二个 shell。要在第二个 shell 中获取环境变量,您需要这样的东西:

exec('env MAGICK_THREAD_LIMIT=1; /usr/local/bin/convert 1.pdf -density 200 -quality 85% 1.jpg');

现在,如果您认为 shell 本身可能是问题所在,因为制作 shell 花费的时间太长,请使用您知道几乎不需要时间的东西对其进行测试:

$starttime = microtime(true);
exec('echo hi');
$endtime = microtime(true);
$time_taken = $endtime-$starttime;

到那时你就知道要尝试找到一些方法来使 shell 实例化得更快。

希望这对您有所帮助!

关于PHP exec() 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14277910/

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