首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache/2.2.6 (Win32)和双核PC上的多线程

Apache/2.2.6 (Win32)和双核PC上的多线程
EN

Stack Overflow用户
提问于 2011-03-20 12:01:37
回答 2查看 344关注 0票数 1

在执行两个非常简单的ajax POST请求(成功)时,Apache服务器的响应顺序似乎总是与请求的顺序相同,尽管第二个请求处理的时间比第一个请求要少得多。

服务器处理Request1所需的时间是30秒。服务器处理Request2所需的时间是10秒。

代码语言:javascript
复制
        var deferred1 = dojo.xhrPost(xhrArgs1);
        var deferred2 = dojo.xhrPost(xhrArgs2); 

我希望Apache能够在我的双核机器上实现一些“并行化”,这显然是不可能的。

当我在单独的broswer中同时执行每个请求时,工作正常时,首先返回Request2。

事实:

  1. httpd.conf有: ThreadsPerChild 50,MaxRequestsPerChild 50
  2. PHP版本:5.2.5
  3. Apache的访问日志声明,两个客户端请求都是同时接收的,这是预期的。

知道为什么在同一个浏览器运行时我没有得到“并行化”吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-20 12:06:25

当从同一个浏览器发送两个请求时,它们都共享相同的会话

当会话存储在文件中(这是默认的)时,会使用一种锁定机制,用于,以确保两个脚本不会同时使用同一个会话() --这可能导致第一个脚本的会话数据被第二个脚本过写。

这就是为什么第二个脚本没有在第一个脚本完成之前启动:它正在等待会话数据上的锁(由第一个脚本创建)被释放。

要了解更多信息,请查看的手册页--这可能是解决问题的方法:在sleep()之前关闭会话(引用):

会话数据通常在脚本终止后存储,不需要调用session_write_close(),但是由于会话数据被锁定以防止并发写入,因此只有一个脚本可以在任何时候对会话进行操作。

当将框架集与会话一起使用时,由于这种锁定,您将一个接一个地加载框架。

只要完成对会话变量的所有更改,就可以通过结束会话来减少加载所有帧所需的时间。。

票数 1
EN

Stack Overflow用户

发布于 2011-03-21 04:13:13

浏览器通常有两个连接到同一个站点的限制(尽管在某些浏览器中可能会增加这个限制)。有些浏览器将保留一个连接,用于下载图片等内容,另一个连接用于XHR。这意味着您的两个XHR调用实际上是在同一个连接中发出的,一个接一个。

您的浏览器将在每次XHR调用之后立即返回,因为它们是异步的,但在内部它可能只是批量处理请求。

当您在两个不同的浏览器上运行时,显然每个浏览器都有两个连接,因此两个XHR请求在不同的连接中发出。这里没问题。

现在它取决于浏览器。如果浏览器允许使用XHR调用占用这两个连接,则可以同时运行两个请求。然后,将由服务器首先执行哪一个操作。

无论如何,如果您同时尝试使用3(或任意数字>2) XHR请求,则在现代浏览器上不会同时在服务器上执行超过2的XHR请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5368347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档