将 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
我是 运行 一个 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