[whatwg] Limit on number of parallel Workers.

Oliver Hunt oliver at apple.com
Tue Jun 9 18:28:04 PDT 2009


I believe that this will be difficult to have such a limit as sites  
may rely on GC to collect Workers that are no longer running (so  
number of running threads is non-deterministic), and in the context of  
mix source content ("mash-ups") it will be difficult for any content  
source to be sure it isn't going to contribute to that limit.   
Obviously a UA shouldn't crash, but i believe that it is up to the UA  
to determine how to achieve this -- eg. having a limit to allow a 1:1  
relationship between workers and processes will have a much lower  
limit than an implementation that has a worker per thread model, or an  
m:n relationship between workers and threads/processes.  Having the  
specification limited simply because one implementation mechanism has  
certain limits when there are many alternative implementation models  
seems like a bad idea.

I believe if there's going to be any worker related limits, it should  
realistically be a lower limit on the number of workers rather than an  
upper.

--Oliver

On Jun 9, 2009, at 6:13 PM, Dmitry Titov wrote:

> Hi WHATWG!
>
> In Chromium, workers are going to have their separate processes, at  
> least for now. So we quickly found that "while(true) foo = new  
> Worker(...)" quickly consumes the OS resources :-) In fact, this  
> will kill other browsers too, and on some systems the unbounded  
> number of threads will effectively "freeze" the system beyond the  
> browser.
>
> We think about how to reasonably place limits on the resources  
> consumed by 'sea of workers'. Obviously, one could just limit a  
> maxumum number of parallel workers available to page or domain or  
> browser. But what do you do when a limit is reached? The Worker()  
> constructor could return null or throw exception. However, that  
> seems to go against the spirit of the spec since it usually does not  
> deal with resource constraints. So it makes sense to look for the  
> most sensible implementation that tries best to behave.
>
> Current idea is to let create as many Worker objects as requested,  
> but not necessarily start them right away. So the resources are not  
> allocated except the thin JS wrapper. As long as workers terminate  
> and the number of them decreases below the limit, more workers from  
> the "ready queue" could be started. This allows to support  
> implementation limits w/o exposing them.
>
> This is similar to how a 'sea of XHRs' would behave. The test page  
> here creates 10,000 async XHR requests to distinct URLs and then  
> waits for all of them to complete. While it's obviosuly impossible  
> to have 10K http connections in parallel, all XHRs will be  
> completed, given time.
>
> Does it sound like a good way to avoid the resource crunch due to  
> high number of workers?
>
> Thanks,
> Dmitry
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/attachments/20090609/28995af0/attachment-0002.htm>


More information about the whatwg mailing list