如何使用Web Workers进行多核心负载管理?

时间:2014-05-13 02:24:38

标签: javascript web-worker

当使用网络工作者时,让我们说在四核系统或八核系统上,如何处理负载?

我的意思是,我们说我有4名工人。他们将如何根据当前负载分配4个CPU内核?谁处理负载? (系统?)是否使用了完整的4(或8)个CPU?

1 个答案:

答案 0 :(得分:7)

您基本上有两个选项可以回答这个问题,每个浏览器甚至可能每个浏览器/平台组合都有不同的答案。

选项1)是研究浏览器的代码并弄清楚它是如何实际分配这些Web工作线程的。这可能不仅需要查看浏览器代码的功能,还需要了解特定操作系统如何处理多个CPU。显然,这只能由有权访问浏览器源代码的人(可用于开源浏览器)来完成。

选项2)是构建一个测试应用程序,看看你可以从测试应用程序中学到什么。

我承担了构建测试应用程序的任务,然后在当前版本的流行浏览器中查看我可以从中学到什么。如果您想在系统上使用webWorkers并查看CPU负载如何工作,那么这是测试页面:

http://files.the-friend-family.com/demos/webworker.html

默认情况下,测试页面会启动8个Web工作者。只需取消选中或选中页面上的复选框,即可将其拨回任意数量的网络工作人员。然后,您可以在不同条件下检查系统CPU监视器。检查webworker时,它正在运行计算来计算素数。为了允许向webworker发送消息,它运行1秒的计算,暂停(毫秒)以查看是否有来自主浏览器页面的任何消息要处理,然后再运行1秒计算等等...每秒,它使用最新的素数邮件回到主浏览器窗口。

这是我在使用Windows 8的四核i7-3770K CPU上运行此页面时可以得出的结论。我的Windows 8操作系统上的系统监视器显示了我的四核的8个CPU(关于超线程的一些内容使它显示8个CPU)我认为是一个四核处理器。

IE 11

8 workers running, 100% overall load, all CPUs show as saturated 100%
4 workers running, 65% overall load, all CPUs show some work, none show 100%
2 workers running, 32% overall load, 2 CPUs are near 100%, other CPUs have spikes
  of activity
1 worker running, 18% overall load, 1 CPU shows most of the work, but other 
  CPUs have spikes of activity

Chrome 34

8 workers running, 100% overall load, all CPUs show as 100% all the time
4 workers running, 63% overall load, all CPUs show some work, none show 100%
2 workers running, 32% overall load, 1 CPU near 100%, second CPU shows 
  lots of work, others show sporadic spikes of activity
1 worker running, 17% overall load, 1 CPU shows most of the work, 
  but other CPUS have spikes of activity

Firefox 29

8 workers running, 30% overall load, 4 CPUs show 40% load, others show 20% load
4 workers running, 40% overall load, 4 CPUs show 80% load, others show 5% load
2 workers running, 32% overall load, 2 CPUs show near 100% load, others show 
  spikes of activity
1 worker running, 18% overall load, 1 CPU near 100%, but also has lulls of 
  no activity where others CPUs are doing the work

因此,我得出结论,当有一个Web工作者时,它似乎主要在特定核心上运行,但它没有锁定到该核心,它只是倾向于在该核心上完成大部分工作。 / p>

有两个网络工作者,大多数工作似乎是由两个特定核心完成的,但同样看起来不像是硬绑定,因为有时其他核心会完成一些工作。

有四个网络工作者,IE和Chrome似乎在所有处理器之间共享工作,没有任何挂钩。 Firefox倾向于使用一些处理器来完成大部分工作,而其他工作则不是很多。

有八名网络工作者,IE和Chrome涉及100%的处理器。 Firefox几乎似乎以某种方式保护系统,因为当从4个Web工作者到8个Web工作者时,整体CPU负载实际上已经下降,并且没有一个CPU接近100%。


Web工作者似乎并不特定于某个特定核心。人们必须查看特定平台上特定浏览器的源代码,以了解它是浏览器代码还是管理核心使用情况的操作系统。我猜(虽然我实际上并不知道),浏览器正在为每个Web工作者使用操作系统级线程,然后由操作系统决定如何将其映射到可用内核与其他负载上系统

刚刚找到this info on Firefox on MDN

  

Worker接口产生真正的操作系统级线程

相关问题