0

如果我有多个,同时,Ajax javascript 查询 domain/somefile.php,

somefile.php 必须从 curl 请求 (curl_exec) 到 domain/somehandler 的响应并返回它们

Apache2 如何处理并行性?,它真的比我直接在域/somehandler 上执行 Ajax 查询慢吗?

谢谢解释

4

1 回答 1

0

how is handled parallelism by Apache2?- 就 Apache 而言,没有真正的问题,除非您将其配置得非常糟糕,以至于它没有足够的进程/线程来处理负载。它更多的是关于硬件资源和网络带宽,而不是其他任何东西。这里要注意的事情与 Apache 无关,实际上与我将在下面解释的 PHP 会话有关,但首先...

Is it really slower than if I was doing the Ajax queries directly on domain/somehandler?- 是的,不可避免的。这是因为您立即将完成事务所需的 HTTP 请求数量增加了一倍。您还增加了所需的带宽量和总体 CPU 时间。它是否会明显变慢以及是否会导致问题取决于一千个因素,例如您正在做什么、如何设置 cURL 脚本、两个后端服务器之间的网络链接有多快等等等等, ETC...


在这里反复出现的与PHP 驱动的应用程序的并发问题有关的问题的答案与Sessions相关。许多站点使用会话来跟踪用户数据、登录状态、各种信息,这本身并没有什么问题(尽管应尽可能避免使用它们,并且与REST完全不兼容),但它可能会导致并发问题如果他们没有正确处理。

这样做的原因是 PHP 将会话的数据存储在服务器本地文件系统中的文件中。当会话打开时,文件被锁定以防止会话因并发写入而损坏。这意味着尝试使用会话文件的第二个请求将“阻塞”(即等待),直到第一个请求释放它对会话文件的锁定。

大多数时候人们没有注意到这一点,我在这里看到的最常见的事情是尝试通过基于 PHP 的 servlet 脚本提供文件下载的人,并且他们在发送文件时让会话文件保持打开状态。这会导致用户在下载文件时无法从站点加载任何页面。

session_write_close()完成会话数据后立即调用可以轻松避免该问题。

...当然,如果您不使用会话,那么无论如何这些都不会影响您。

于 2012-06-17T20:30:33.043 回答