[webkit-dev] support for navigator.cores or navigator.hardwareConcurrency

Rik Cabanier cabanier at gmail.com
Wed May 7 21:08:04 PDT 2014

On Wed, May 7, 2014 at 7:58 PM, Brady Eidson <beidson at apple.com> wrote:

> On May 7, 2014, at 5:38 PM, Rik Cabanier <cabanier at gmail.com> wrote:
> On Wed, May 7, 2014 at 5:07 PM, Benjamin Poulain <benjamin at webkit.org>wrote:
>> On 5/7/14, 4:13 PM, Benjamin Poulain wrote:
>>> On 5/7/14, 3:52 PM, Filip Pizlo wrote:
>>>> Exactly. Ben, Oliver, and others have made arguments against web
>>>> workers. Rik is not proposing web workers.  We already support them. The
>>>> point is to give API to let developers opt into behaving nicely if they
>>>> are already using web workers.
>>> I have nothing against Web Workers. They are useful to dispatch
>>> background tasks.
>>> They are basically the Web equivalent dispatch_async() of GCD, which is
>>> already a very useful tool.
>>> What you are suggesting is useful for making Web Workers the tool to do
>>> high performance multi-thread computation.
>>> I don't think Web Workers are a great tool for that job at the moment. I
>>> would prefer something along TBB, GCD or something like that.
>>> For high performance computation, I think a more useful API would be
>>> something like TBB parallel_for with automatic chunking.
>>> It is actually had to do faster than that with the number of cores
>>> unless you know your task very very well.
>>> It would be a little more work for us, but a huge convenience for the
>>> users of Web Workers.
>> After chatting with Filip, it seems such a model is unlikely to happen
>> anytime soon for JavaScript.
>> In the absence of any tasks/kernels model, I am in favor of exposing a
>> "good number of thread" API. It is definitely better than nothing.
> Do we know what this number would be? My guess would be the number of
> cores for "regular" systems...
> Define “regular” systems:

"regular" systems are those were all running CPU's are of the same type.
There are some exotic systems where some CPU's are much faster than others.
I'm unsure what we should return there.

>  As Ryosuke mentioned, for systems that run on battery power (read: a vast
> majority of systems), keeping cores asleep to preserve battery life is
> often preferable to the user instead of waking up all available hardware
> and building up heat.

Actually, spinning up more cores while on battery power might be more

I'm having a hard time finding good data, but take this chart for instance:
Let's say you have a task that would take 1 core 4 seconds. This would mean
4 x 2612mw = 10456mw
Now if you can divide it over 4 cores: display = 854 (AMOLED), cpu core
(simplified) = 2612 - 854 = 1758mw -> 854 + (4 x 1758mw) = 7886mw

On the desktop world, Intel Turbo boost [1] boosts single thread
performance but at the expense of making the CPU run much hotter. Putting
an even load will reduce power usage so the ratio of operator/watt will
There's a paper from NVidia that also describes this [2].

Just because you can break up the work, doesn't mean that you do MORE work.

> Also, what type of cores?  Physical cores, or logical cores?

It would be logical cores. I think we're all compiling and running WebKit
with hyper-threading turned on so it seems to work fine for parallel
processing these days.

>  Boris Zbarsky indicated that Firefox figures out how many workers should
> run concurrently. Maybe we can reuse that algorithm?
> I think it’s definitely worth looking in to.

I got a reply from Boris and it's not what we're looking for:

When a page tries to start a worker, we check whether that origin already
has more than N workers running (where N is a pref, defaulting to 20).  If
it does, we just queue the worker until some of the extant ones finish.
 Otherwise we look for an idle thread, and if not found start a new one.

Idle threads that hang out for more than 30 seconds without doing anything
get wound down.

Maybe we can keep the current patch that returns the number of available
CPU's for now. [3]

2: page 12 of
3: https://bugs.webkit.org/show_bug.cgi?id=132588
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-dev/attachments/20140507/5cbd88dc/attachment.html>

More information about the webkit-dev mailing list