【问题标题】:PHP page process separationPHP页面进程分离
【发布时间】:2012-07-09 11:28:40
【问题描述】:

如果某个 php 页面正在运行一些较长的进程,例如 sleep 或 while 循环,这使得它需要一段时间才能加载,它是否会影响同一页面中的其他进程?,
我注意到,当我尝试使用不同的短进程打开同一页面时,加载也需要很长时间,并且要明确它不会在第一个(长进程)之前加载,

这是真的还是我的代码有问题以及如何防止它?
我认为这与缓存有关,但在得到提示或答案之前我不想搞砸

【问题讨论】:

    标签: php http caching process


    【解决方案1】:

    PHP 在单个进程中运行,每次访问页面时,它都会启动该进程、进程并完成。 每个进程都不会影响其他进程。

    【讨论】:

      【解决方案2】:

      我注意到,当我尝试用不同的短信息打开同一页面时 进程,[...] 它不会在第一个(长进程)之前加载

      最常见的原因:

      • 您的脚本“按原样”使用 PHP 会话,它使用文件锁定。文件锁定机制确保一次只有一个脚本可以编辑每个用户的会话数据,但这确实意味着如果来自同一用户的两个请求同时发生,则第二个脚本不会在第一个脚本完成之前启动,如果它们都依赖在会话上(虽然两个不同的用户有不同的会话文件,所以他们不会发生冲突)
      • 浏览器会自动检测到页面耗时过长,并在后台故意延迟后续请求 — 我相信这是 Google Chrome 默认执行的操作。

      然而,这两种情况都相对安全,因为延迟仅在同一用户尝试同时加载多个页面的情况下出现,这是不常见的——无论实际页面加载多长时间,不同的用户都不会看到延迟。

      更多关于主题in this excellent SO answer

      【讨论】:

      • 是的,他们正在使用会话,是否可以通过编辑 php.ini 或其他任何内容来防止这种情况发生?
      • 您的应用程序中的每个用户是否应该同时加载多个页面?因为通常这是没有必要的。
      • 嘿,非常感谢您对会话的说明,我使用 konrness.com/php5/how-to-prevent-blocking-php-requests 解决了它,因为我不需要写,只需阅读,+++1
      • 很酷,但只是记录,我试图说明的是两个个人用户通常不会看到问题。例如,如果用户 A 加载 a.php,然后在 a.php 完成之前加载 b.php,他将经历延迟(就像你一样),但是如果用户 A 加载 a.php,而用户 B 在之前加载 b.php用户 A 使用 a.php 完成,b.php 将为用户 B 加载就好了(不同的会话文件)。因为通常发生的是前者,而不是后者,所以在现实生活中,这种阻塞很少成为问题。只是要记住一点,我认为了解它的工作原理很重要。
      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2013-01-22
      相关资源
      最近更新 更多