我对php的工作方式有些怀疑。我无法在书本上的任何地方找到答案,所以我想到了堆栈;)
所以这就是:
假设我们有一台安装了php + apache的服务器。以下是我的信念:
1 - php一次可以处理一个请求。如果apache一次可以处理多个线程并不重要,因为最终调用的php解释器是单线程的。
2 - 从信念1开始,我相信如果服务器在同一时间接收4个呼叫,则这些呼叫排队并一次执行1个。谁最后提出请求最后获得响应。
3 - 从1和2开始,如果我调用一个对应于脚本的URL来执行一些繁重/耗时的操作,我会慢慢停止服务器直到脚本返回。
什么是真的?什么是假的?
欢呼声
答案 0 :(得分:1)
我的水晶球表明你正在使用PHP会话,并且你有同时请求(iframe或AJAX)排队。问题是默认会话处理程序使用文件,session_start()
锁定数据文件。您应该快速阅读会话数据,然后致电session_write_close()以释放文件。
答案 1 :(得分:0)
我认为没有理由为什么PHP无法同时处理多个请求。也就是说,处理单个客户端的请求可能是 semi-true ,具体取决于脚本的类型。
许多脚本使用会话。调用session_start()
时,会话正在打开且已锁定。当脚本执行结束时,会话正在关闭并且解锁(这可以手动完成)。当对同一会话有多个请求时,第一个请求打开并锁定会话,第二个请求必须等到会话解锁。这可能会造成多个PHP脚本无法同时执行的印象,但这种情况(部分)仅适用于使用相同会话的请求(换句话说 - 来自同一浏览器的请求)。来自两个客户端(浏览器)的请求可以并行处理,只要它们不使用在其他请求中被锁定/解锁的资源(文件,数据库表等)。