将sleep()添加到循环中是否会减轻服务器资源?

时间:2016-02-02 18:42:48

标签: php server sleep

我正在运行一个扫描'扫描'一个目录,每60秒一次,直到找到具有给定名称的文件:

<?php
do {
    if (file_exists("../path/file.txt)) {
        //Do Stuff
        $status = "File Found";
        echo $status;
    } else {
        $status = "File Not Found";
        sleep(60);
    }
} while ($status == "File Not Found");
?>

在此示例中,删除sleep()是否需要更多服务器资源?

谢谢,

2 个答案:

答案 0 :(得分:3)

简而言之,是的,但不要担心。

sleep正在执行时,脚本的CPU处理几乎停止。所以,是的,它将减轻处理资源。 (脚本仍然在内存中,因此仍然使用这些资源,但这在现代机器上应该不是问题。)

如果您的目标是每60秒执行一次,最佳做法是将您的PHP设为 cron脚本,并以低优先级运行。

为低优先级PHP脚本配置Cron:

nano crontab -e

添加以下内容:

* * * * *   /usr/bin/nice -n 12 php -q /path/file.php

/path/file.php替换为PHP脚本的完整路径。

确保您的PHP脚本已准备就绪

编辑脚本的文件权限以允许执行。

chmod ug+rwx /path/file.php

(再次用您实际的PHP脚本的完整路径替换/path/file.php。)

最后,如果您打算以这种方式运行,最好在PHP脚本中使用前2行

#!/usr/bin/php5
<?php

答案 1 :(得分:1)

是的,每个指令运行都会花费资源,无论是注册空间,内存还是磁盘IO。

在这种情况下,请勿删除mysite.com/index.php - 不经常休息的轮询是不必要地粉碎资源的好方法。

在这种情况下,在文件出现之前,您将像在条件检查sleep()上浪费处理器周期和可能的某些磁盘IO一样循环。

通过在循环之间等待一分钟,可以大大降低成本,以及 as-fast-as-you-can-can 条件检查。