为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
茅侃侃 2022-07-09 16:47:46
我有一个php函数<?phpwhile(true){   sleep(2);   echo 1;}?>请问:是kill server吗?
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

这个问题有两种可能的答案...

第一的

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

第二

但是,如果您处于面向 Web 的环境中(即这个 php 脚本是通过对您的 Web 服务器的 HTTP 请求启动的),那么您必须考虑这样一个事实,即您可以使用的 Web 工作者数量是有限的。如果请求发起 30 次,而您只有 30 个工作人员可用,那么您现在所有工作人员都被无限捆绑,用户无法再向您的 Web 服务器发出任何请求。所以从这个意义上说,您实际上已经使服务器资源紧张

while(true)所以每当你有一个循环时要非常小心。问问自己,这真的有必要吗?大多数时候不是。

注意

顺便说一句,同样重要的是要了解在外部流中花费的时间(其中包括睡眠)不计入您的max_execution_time. 因此,睡眠中花费的 2 秒不算在内,但每次进程再次唤醒时,该时间都会累加。所以是的,max_execution_time如果您希望进程在该循环内继续无限运行,则设置为 0 很重要。在 CLI 解释器中,默认值为 0,但在大多数 Web SAPI 中,它的默认值为 30 秒,因为您通常不希望任何面向 Web 的请求占用您的工作人员那么长时间。

[1] http://man7.org/linux/man-pages/man3/sleep.3.html


查看完整回答
反对 回复 2022-07-09
  • 1 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信