首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有嵌入式web服务器的PhantomJS只使用一个CPU。

带有嵌入式web服务器的PhantomJS只使用一个CPU。
EN

Stack Overflow用户
提问于 2015-03-24 20:27:46
回答 1查看 1.9K关注 0票数 5

我有一个问题,使用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限制吗?有办法绕过它吗?

(问题也张贴在这里上)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-24 20:38:16

,这是PhantomJS?已知的限制吗?

是的,这是一个预期的限制,因为PhantomJS对所有东西都使用相同的WebKit引擎,而且由于JavaScript是单线程的,这实际上意味着每个请求都会被一个接一个地处理(可能是互锁的),但永远不会同时处理。平均总时间将与每个客户线性增加。

文档说:

目前有10个并发请求的限制;任何其他请求都将排队。

并发请求和并行请求的概念有区别。并发仅仅意味着任务不确定地完成。这并不意味着任务所由的指令在不同的(虚拟)核心上并行执行。

有办法绕过它吗?

除了通过child_process运行服务器任务之外,no。JavaScript支持多线程的方式是使用worker,但是工作人员是沙箱的,没有访问require的权限,因此不能创建页面来完成工作。

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

https://stackoverflow.com/questions/29242252

复制
相关文章

相似问题

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