2011-05-26 172 views
2

我有一个用PHP编写的脚本,向eBay发送一个API调用。每秒钟有几次(15-50次)的呼叫。我做了一些基准测试,发现PHP并没有像我想的那样快速执行它们,因为它不能并行运行它们。如何在PHP中并行执行多个HTTP请求?

我的问题:这是个好主意,转换脚本到Java,这样才能给它的多线程能力?这会不会像我想的那样平行运行每个请求?或者我误导了相信这么做?

欢迎任何其他建议。

谢谢。

+1

我已将您的问题重新命名为不会如此令人难以置信的误导。你的问题最终与性能无关,与能够并行创建多个HTTP请求有关。 – Charles 2011-05-26 02:04:22

回答

6

首先,在Java重写你的脚本是不会神奇地使多线程的,除非你有并发编程的经验,我会避免这种情况。即使这样,这并不一定意味着它会比你的PHP脚本运行得更快。

其次,PHP可以执行并行使用卷曲的多执行函数多个HTTP请求。有关如何使用它们,请参阅文档curl_multi_initcurl_multi_exec

1

检查Computer Language Benchmark Shootout Game

的Java 1.71 PHP 63.19所以Java约为37X速度更快。

+0

根据该图表,Java 6服务器比PHP快约30倍。 – 2011-05-26 01:45:31

+2

在这种情况下,这些基准测试是完全没用的,因为几乎可以肯定网络I/O阻塞会降低脚本速度。单线程Java应用程序几乎不会比OP的PHP脚本更快。 – 2011-05-26 02:14:06

+0

@Dan Simon - 也许karmakaze的答案更容易理解,因为这个问题最初的题目是“PHP vs JAVA performance”;-)你是正确的,一旦我们理解了问题*应该是关于如何“并行地处理多个HTTP请求“我们可以看出,通过比较不同编程语言的性能,不会找到答案。 – igouy 2011-05-26 15:24:12

1

使用Java,你当然可以可能使用Threads API并行执行请求(可能使用ThreadPoolExecutor)。也就是说,添加并发并不能保证代码将在更短的时间内执行。

你知道PHP代码是连瓶颈执行?它很可能是eBay的API请求节流,这样就可以只发一组固定数量的每秒请求,在这种情况下,它其实并不重要代码有多快。或者,可能出现这种情况,您的网络速度很慢,或者延迟时间很长,您的时间将首先用于解决这些问题。

-1

如果您在via PCNTL中编译它,那么PHP将支持线程化,这可能为您节省更多时间,然后重新编写Java中的大量网络库。

+0

这很有趣。谢谢(你的)信息。 – 2011-05-26 01:54:45

+1

PCNTL扩展不会*提供**线程**。它增加了POSIX过程控制,它可以帮助编写一个由* forking *进程工作的应用程序。 – Charles 2011-05-26 02:01:27

0

如何使用多个隐形框架使浏览器可以并行处理它们,并具有明显的换页请求帧,并纳入响应客户端?

相关问题