6

您好,我的问题是数据流在 Apache Web 服务器 + PHP 中是如何工作的。

当用户访问 url: localhost/index.php 并且在同一时间当另一个用户访问相同的 url 我猜请求被一个接一个地执行(不是多线程的)并且第一个用户得到响应然后另一个。

问题是:如果第一个请求像 1 分钟一样长时间保持循环,其他用户应该等待第一个请求完成,然后他们的请求完成,以便从 Apache Web 服务器 + PHP 获得响应?如果答案是肯定的(其他用户应该在队列中等待):我们可以让请求并行(多线程)执行以防止在队列中等待

4

2 回答 2

10

虽然 PHP 可能是单线程的,但 Apache 可以运行多进程和多线程。这允许同时执行许多请求。实际上,您可以配置同时请求的数量。

您实际上可以看到 Apache 实时服务这些请求,查看哪些正在等待,哪些正在通过 mod_status ( http://httpd.apache.org/docs/2.2/mod/mod_status.html ) 提供服务。

于 2013-02-20T10:52:01.837 回答
3

Apache 有多个线程,因此可以同时运行多个 PHP 脚本。

诸如 Nginx 之类的 Web 服务器使用事件驱动的架构。异步 I/O 和所有的爵士乐。

Web 服务器通常具有某种机制,使它们能够一次处理多个请求,或者至少使它们看起来可以处理。

Apache 使用线程,Nginx 使用事件循环,但在您想要的意义上它们不是串行的。原因很简单:浪费资源。当您的 PHP 脚本正在等待硬盘移动到正确的位置以便您可以从正在读取的文件中读取一个块时,您还不如做其他事情,即。现在处理另一个不需要 I/O 的请求。

如果在其他用户发出请求之前完成某些请求至关重要,您应该考虑切换到更加解耦的异步架构。我不知道您对当前解决方案的投入程度。事件处理可以简单地实现为简单的轮询甚至是长轮询

于 2013-02-20T10:54:57.343 回答