apachephp>;用户请求


apache php > users requests

嗨,我的问题是数据流如何在Apache web服务器+PHP中准确工作。

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

问题是:如果第一个请求以某种方式在循环中停留很长时间,比如1分钟,那么其他用户应该等待第一个请求完成,然后他们的请求完成,以便从Apache web服务器+PHP获得响应?如果答案是肯定的(其他用户应该在队列中等待):我们是否可以并行执行请求(多线程)以防止在队列中等候

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

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

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

像Nginx这样的Web服务器使用事件驱动的体系结构。异步I/O和所有这些爵士乐。

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

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

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