【问题标题】:PHP infinite loop prevents access to other scripts?PHP无限循环阻止访问其他脚本?
【发布时间】:2012-12-10 21:36:54
【问题描述】:

在 Apache 上的 PHP 中运行无限循环时,其他页面/脚本会挂起(需要永远加载),直到我中断脚本的执行。但是,其他页面仍将在不同的用户会话或浏览器上执行。可以解决吗?

【问题讨论】:

  • 你的机器有多少个 CPU? apache中有多少线程正在运行?一般来说,我会认为多个脚本可以同时运行。也许你需要:httpd.apache.org/docs/2.2/mod/worker.html(我假设你的“无限”只是一个“while(1);”或类似的东西,而不是更复杂的东西,可能会导致与你的 main.php 发生锁定冲突)
  • 您的无限脚本是否需要会话?如果没有,您可以从命令行运行它。虽然 php 可能不是保持程序运行的正确工具...
  • 您可以尝试为您的无限运行脚本使用专用/特殊会话 ID。只要确保它不会与您的正常会话 ID 冲突

标签: php loops infinite


【解决方案1】:

这是一个竞争条件问题。

一旦您session_start() 会话,附加到会话 ID 的文件会以限制性权限打开(锁定为读取和写入)。如果调用另一个session_start(),它将等待会话文件被解锁,以避免第二个脚本异步修改会话。

看看this article,它比我更能解释发生了什么。

【讨论】:

  • 这不是“竞争条件”的定义,它是一个简单的锁定资源。正确答案。
猜你喜欢
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
相关资源
最近更新 更多