PHP,多线程和其他疑虑

时间:2011-07-12 08:04:25

标签: php

早上

我对php的工作方式有些怀疑。我无法在书本上的任何地方找到答案,所以我想到了堆栈;)

所以这就是:

假设我们有一台安装了php + apache的服务器。以下是我的信念:

1 - php一次可以处理一个请求。如果apache一次可以处理多个线程并不重要,因为最终调用的php解释器是单线程的。

2 - 从信念1开始,我相信如果服务器在同一时间接收4个呼叫,则这些呼叫排队并一次执行1个。谁最后提出请求最后获得响应。

3 - 从1和2开始,如果我调用一个对应于脚本的URL来执行一些繁重/耗时的操作,我会慢慢停止服务器直到脚本返回。

什么是真的?什么是假的?

欢呼声

2 个答案:

答案 0 :(得分:1)

我的水晶球表明你正在使用PHP会话,并且你有同时请求(iframe或AJAX)排队。问题是默认会话处理程序使用文件,session_start()锁定数据文件。您应该快速阅读会话数据,然后致电session_write_close()以释放文件。

答案 1 :(得分:0)

我认为没有理由为什么PHP无法同时处理多个请求。也就是说,处理单个客户端的请求可能是 semi-true ,具体取决于脚本的类型。

许多脚本使用会话。调用session_start()时,会话正在打开且已锁定。当脚本执行结束时,会话正在关闭并且解锁(这可以手动完成)。当对同一会话有多个请求时,第一个请求打开并锁定会话,第二个请求必须等到会话解锁。这可能会造成多个PHP脚本无法同时执行的印象,但这种情况(部分)仅适用于使用相同会话的请求(换句话说 - 来自同一浏览器的请求)。来自两个客户端(浏览器)的请求可以并行处理,只要它们不使用在其他请求中被锁定/解锁的资源(文件,数据库表等)。