我有一个问题,使用PhantomJS与web服务器模块的多线程方式,并发请求。
我使用Java2.0在服务器端用PhantomJS创建高库存图,解释了这里 (和代码这里)。它工作得很好,当测试几个大小的图表时,我得到了相当一致的结果,大约0.4秒来创建一个图形。
我链接到的代码最初是由高级图表团队发布的,在http://export.highcharts.com/的导出服务器中也使用它。为了支持并发请求,它保留了一个生成的PhantomJS进程池,基本上它的模型是每个并发请求一个幻影实例。
我看到keep服务器模块最多支持10个并发请求(在这里解释过),所以我想我可以点击它,在池中保留较少的PhantomJS进程。然而,当我尝试使用更多的线程时,我经历了一个线性的减速,就好像PhantomJS只使用一个CPU一样。这种慢速显示如下(对于单个PhantomJS实例):
一个客户端线程,平均请求时间0.44秒。
2个客户端线程,平均请求时间0.76秒。
4个客户端线程,平均请求时间1.5秒。
这是已知的PhantomJS限制吗?有办法绕过它吗?
(问题也张贴在这里上)
发布于 2015-03-24 20:38:16
,这是PhantomJS?已知的限制吗?
是的,这是一个预期的限制,因为PhantomJS对所有东西都使用相同的WebKit引擎,而且由于JavaScript是单线程的,这实际上意味着每个请求都会被一个接一个地处理(可能是互锁的),但永远不会同时处理。平均总时间将与每个客户线性增加。
文档说:
目前有10个并发请求的限制;任何其他请求都将排队。
并发请求和并行请求的概念有区别。并发仅仅意味着任务不确定地完成。这并不意味着任务所由的指令在不同的(虚拟)核心上并行执行。
有办法绕过它吗?
除了通过child_process运行服务器任务之外,no。JavaScript支持多线程的方式是使用worker,但是工作人员是沙箱的,没有访问require的权限,因此不能创建页面来完成工作。
https://stackoverflow.com/questions/29242252
复制相似问题