有没有一种方法可以确定JavaScript中可用CPU核心的数量,以便您可以根据该数量调整web worker的数量?
发布于 2010-07-20 19:37:02
不,没有,除非你使用一些ActiveX。
发布于 2013-06-07 17:45:31
发布于 2014-02-17 08:30:49
这是我拼凑出来的一个相当快速的并发估计器...它还没有经过太多的测试:
下面是workers运行的代码(因为我有一个jsfiddle链接,所以需要一个示例):
// create worker concurrency estimation code as blob
var blobUrl = URL.createObjectURL(new Blob(['(',
function() {
self.addEventListener('message', function(e) {
// run worker for 4 ms
var st = Date.now();
var et = st + 4;
while(Date.now() < et);
self.postMessage({st: st, et: et});
});
}.toString(),
')()'], {type: 'application/javascript'}));
估计器有大量的Worker在短时间内(4ms)运行,并报告他们运行的时间(不幸的是,performance.now()在Web Worker中不可用以获得更准确的计时)。然后,主线程检查以查看在同一时间内运行的工作线程的最大数量。这个测试被重复多次,以获得一个像样的样本来产生估计值。
因此,主要的想法是,给定足够小的工作量,只有在有足够的内核支持该行为的情况下,才应该安排工人同时运行。这显然只是一个估计,但到目前为止,对于我测试过的几台机器来说,它是相当准确的--这对于我的用例来说已经足够好了。可以增加样本数量以获得更准确的近似值;我只使用10,因为它很快,我不想浪费时间进行估计,而不是仅仅完成工作。
https://stackoverflow.com/questions/3289465
复制相似问题