PHP无限循环会阻止访问其他脚本?

7
在Apache上使用PHP运行无限循环时,其他页面/脚本会出现挂起(长时间加载)的情况,直到我中断脚本的执行。但是,在不同用户会话或浏览器上仍会执行其他页面。这个问题可以解决吗?

你的机器有多少个CPU?Apache中有多少个线程正在运行?我本以为多个脚本通常可以同时运行。也许你需要查看:http://httpd.apache.org/docs/2.2/mod/worker.html(我假设你的“无限循环”只是一个“while(1) ;”或类似的东西,而不是更复杂的可能会与main.php发生锁定冲突的东西) - Mats Petersson
你的无限脚本需要会话吗?如果不需要,你可以从命令行运行它。虽然PHP可能不是保持程序运行的正确工具... - jeroen
1
你可以尝试为无限运行脚本使用专用/特殊的会话ID。只要确保它不会与普通会话ID冲突即可。 - jeroen
1个回答

5
这是一个竞态条件问题。
一旦你执行了session_start()来启动一个会话,会有一个附着在会话ID上的文件被以严格的权限打开(锁定以进行读和写操作)。如果另一个session_start()被调用,它将等待会话文件被解锁,以避免第二个脚本异步修改会话。请参考这篇文章,该文章比我更好地解释了发生了什么。

4
这不是“竞态条件”的定义,而只是一个简单的锁定资源。虽然答案是正确的。 - deceze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接