Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php服务器后台进程_Php_Mysql_Cron - Fatal编程技术网

php服务器后台进程

php服务器后台进程,php,mysql,cron,Php,Mysql,Cron,我想知道如何实现一些php服务器后台功能,以每秒处理一些评估(独立于用户查看页面) 我当前的解决方案是使用每秒运行的cron作业完成的。我想知道是否还有其他选择或可能性 提前感谢我建议您不要使用cron,而是编写一个守护进程,您可以使用PHP、python、node.js或您喜欢的语言来完成。一旦您编写了脚本,您就可以使用while循环和sleep在守护进程中转换它 while (1) { if (x == y) { echo "yay!" } sleep(1); } 2)

我想知道如何实现一些php服务器后台功能,以每秒处理一些评估(独立于用户查看页面)

我当前的解决方案是使用每秒运行的cron作业完成的。我想知道是否还有其他选择或可能性


提前感谢

我建议您不要使用cron,而是编写一个守护进程,您可以使用PHP、python、node.js或您喜欢的语言来完成。一旦您编写了脚本,您就可以使用while循环和sleep在守护进程中转换它

while (1)
{
  if (x == y) {
    echo "yay!"
  }
  sleep(1);
}
2) 用包装器编写程序,这样它就不会崩溃

while test 1
do
php /usr/local/bin/continual_process.php
done
这种方法的问题在于它经常使用CPU周期。如果您将程序编写为node.js应用程序,那么事件驱动体系结构和
setTimeout
功能可以帮助您扩展应用程序(并让您思考解决问题的不同思维方式)

另外,你必须考虑处理循环需要多长时间。如果你每秒钟调用一次程序,但循环需要2秒钟,那么你正在消耗你的进程!

sleep
方法可能也不值得。如果循环需要2秒,而您
睡眠1
,则每3秒运行一次进程


最后,如果您的流程快速而轻松(在1秒循环下),考虑使用
setInterval

cronjob是正确的。尽管每秒钟似乎都过多,每一分钟都有点实际-没有意识到cron实际上会运行到每一秒它必须每秒评估一次,因为它需要在计划的时间执行计划的操作。在javascript引擎中,超时不太可能比睡眠使用更少的CPU周期(1)setTimeout的语义与web浏览器中的大致相同:timeout arg是执行前等待的最小毫秒数,而不是保证。命令只会被检查,因此在每个轮询周期(在节点中)都是非阻塞的,而在C和PHP中是阻塞的。阻塞并不意味着它会阻塞CPU,它意味着进程会告诉内核:我在x个时间段内不会做任何事情,之后再给我CPU时间。由于NodeJS实际上可以在你“睡觉”的时候在后台做一些事情,与CPU使用率绝对为0的C/PHP相比,CPU消耗可能不是0。我可以想象,如果只有1个挂起事件,并且是超时,V8引擎可以对此进行优化。。但即使这样,CPU消耗量也会相等(0)。如果您感到好奇,请使用
sleep(100)
编写一个小脚本,然后检查top/htop并读取进程状态和CPU使用量。应处于空闲或休眠状态,具体取决于您的操作系统。这不是一个疯狂的while循环,它在每次迭代后检查当前时间;)