sleep()默默地占用CPU

Ste*_*e M 15 php performance sleep

我在VMWare中的Linux上运行Apache.

我正在请求的一个PHP页面执行a sleep(),我发现如果我尝试在第一页请求第二页时sleep()'ing,第二页挂起,等待sleep()第一页完成.

有没有人见过这种行为?

我知道PHP不是多线程的,但这似乎是对CPU的严重错误处理.

编辑:我应该提到CPU使用率没有飙升.CPU"hogging"的意思是,当页面处于sleep()时,没有其他PHP页面能够使用CPU.

Man*_*uel 11

可能是被调用的页面打开一个会话然后不提交它,在这种情况下,请参阅此答案以获得解决方案.

  • 如果你将php.ini配置为session.auto_start设置为1,它将在运行任何代码之前打开会话,并保持打开直到你明确关闭它,或者页面到达结尾.第二个请求在运行第一行代码之前似乎就会挂起. (4认同)
  • 在我的例子中,在开始循环之前调用`session_write_close()`会阻止`sleep`锁定对服务器上其他页面的访问. (2认同)

Esp*_*spo 1

您是否确实看到 CPU 达到 100%,或者只是没有为其他页面提供服务?您正在运行多少个 apache 实例?当您在线程中运行 sleep() 时,它们是否都停止了?

PHP 的 sleep() 函数本质上是通过一个空闲循环运行 n 秒。它不会释放任何内存,但不会显着增加 CPU 负载。