Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 while true循环,sleep()函数的最短时间_Php - Fatal编程技术网

PHP while true循环,sleep()函数的最短时间

PHP while true循环,sleep()函数的最短时间,php,Php,我有一个php函数 <?php while(true){ sleep(2); echo 1; } ?> 问:是杀戮服务器吗?这个问题有两种可能的答案。。。 弗斯特 如果kill的意思是一个进程本身会使服务器资源紧张,那么答案是否定的,因为这是一个系统调用[1](在linux实现中),它从CPU中删除该进程,并仅在超时时间过后由调度程序触发的系统中断后才恢复该进程。因此,只要进程处于睡眠状态,它就不再消耗CPU周期(即不使用服务器资源)。在CLI SAPI中,这可能很

我有一个php函数

<?php
while(true){
   sleep(2);
   echo 1;
}
?>

问:是杀戮服务器吗?

这个问题有两种可能的答案。。。 弗斯特 如果kill的意思是一个进程本身会使服务器资源紧张,那么答案是否定的,因为这是一个系统调用[1](在linux实现中),它从CPU中删除该进程,并仅在超时时间过后由调度程序触发的系统中断后才恢复该进程。因此,只要进程处于睡眠状态,它就不再消耗CPU周期(即不使用服务器资源)。在CLI SAPI中,这可能很好,甚至在某些情况下是可取的,因为您通常可以完全控制何时可以运行此脚本以及一次运行多少脚本

第二

如果你在一个面向Web的环境中,(即这个PHP脚本是通过HTTP请求启动到你的Web服务器)的,那么你必须考虑到你有有限数量的Web工作者可供你使用的事实。如果请求被发起了30次,而您只有30个可用的工作人员,那么现在所有的工作人员都被无限地捆绑起来,用户不能再向您的web服务器发出任何请求。因此,从这个意义上讲,您实际上已经耗尽了服务器资源

因此,无论何时出现
while(true)
循环,都要非常小心。问问自己,这真的有必要吗?大多数时候都不是

请注意 顺便说一句,同样重要的是要理解,花在外部信息流中的时间(包括睡眠)并不计入你的睡眠。因此,睡眠中花费的2秒并不算在内,但每次进程再次唤醒时,该时间就被加起来。因此,如果希望进程在该循环中无限地继续运行,那么将
max\u execution\u time
设置为0是很重要的。在CLI解释器中,默认值为0,但在大多数web SAPI中,默认值为30秒,因为您通常不希望任何面向web的请求占用您的工作人员这么长时间


[1]

你说的“杀死服务器”是什么意思?我不认为这会杀死任何东西。根据您的PHPINI配置,它可能会在一段时间后被杀死。请看我的意思是“服务器超时”。@AlexBarker您能告诉我php.ini中的行名称吗?服务器通常配置为在大约30秒后超时。这与PHP没有多大关系,尤其是这一个。你到底是什么意思?您的脚本是一个无限循环。如果您通过web服务器请求此文件,web服务器将在请求超时时终止它。我使用的是长轮询系统,同时循环检查服务器是否有更新和选择表之后。有必要吗?你有没有更好的方法来进行长时间轮询?是的,我建议在面向web的一端使用或,而不是低效的重新启动HTTP请求技术。对于后端轮询,这实际上取决于您正在做什么。如果在特定数据库记录更新时触发客户端推送,我建议将作业启动到某种队列或作业管理器中,该队列或作业管理器从web请求带外运行,并允许客户端推送与启动过程分离。谢谢,如果长时间轮询不起作用,我将尝试。问候你。没有人认为长时间的投票是行不通的。它只是工作效率较低。你说的效率较低是什么意思?如果这是真的,我会问,为什么Facebook使用长轮询?