Yon*_*oni 5 javascript mongoose highcharts phantomjs
我有一个问题,使用PhantomJS与Web服务器模块以多线程方式,并发请求.
我使用PhantomJS 2.0创建highstock在服务器端的Java图形,如解释在这里(和代码在这里).它运行良好,当测试几种尺寸的图形时,我得到的结果非常一致,创建图形大约需要0.4秒.
我链接的代码最初由highcharts团队发布,它也在http://export.highcharts.com/的导出服务器中使用.为了支持并发请求,它保留了一个产生的PhantomJS进程池,基本上它的模型是每个并发请求一个phantomjs实例.
我看到webserver模块最多支持10个并发请求(这里有解释),所以我想我可以利用它来保存池中较少数量的PhantomJS进程.但是,当我尝试使用更多线程时,我经历了线性减速,就像PhantomJS只使用一个CPU一样.这个减速如下所示(对于一个PhantomJS实例):
1个客户端线程,平均请求时间0.44秒.
2个客户端线程,平均请求时间0.76秒.
4个客户端线程,平均请求时间1.5秒.
这是PhantomJS的已知限制吗?有办法解决吗?
(问题也贴在这里)
这是PhantomJS的已知限制吗?
是的,这是一个预期的限制,因为PhantomJS使用相同的WebKit引擎,因为JavaScript是单线程的,这实际上意味着每个请求将一个接一个地处理(可能是互锁的),但从不同时处理.平均总时间将随每个客户线性增加.
该文件说:
目前有10个并发请求的限制; 任何其他请求将排队等候.
并发和并行请求的概念之间存在差异.并发只是意味着任务以非确定性方式完成.这并不意味着构成任务的指令在不同(虚拟)内核上并行执行.
有办法解决吗?
除了通过child_process运行服务器任务之外,没有.JavaScript支持多线程的方式是使用Web Workers,但是一个worker被沙箱化并且无法访问require,因此无法创建页面来执行操作.
| 归档时间: |
|
| 查看次数: |
1837 次 |
| 最近记录: |