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

Does adding sleep() to a loop alleviate server resources?

我是 运行 一个 PHP 循环 'scans' 一个目录,每 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() 是否需要更多服务器资源?

谢谢,

是的,每条指令 运行 都会消耗资源,无论是寄存器 space、内存还是磁盘 IO。

在这种情况下,请勿删除您的 sleep() -- 不停地轮询是不必要地占用资源的好方法。

在这种情况下,在文件出现之前,您将疯狂地循环,浪费处理器周期,并可能在条件检查 file_exists("../path/file.txt) 上浪费一些磁盘 IO。

通过在循环之间等待一分钟,这比常量 尽可能快 条件检查的成本要低得多。

简而言之,是的,但别担心。

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

如果您的目标是每 60 秒执行一次,最好的做法是让您的 PHP 成为一个 cron 脚本,并且 运行 它位于低优先级.


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

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 脚本中的 前两行 :

#!/usr/bin/php5
<?php