Channels ▼

Gastón Hillar

Dr. Dobb's Bloggers

Web Workers: A Draft Recommendation to Allow Parallelism in Scripts

August 26, 2009

Most modern Web pages run scripts. So far, there are many limitations to allow these scripts to take advantage of multicore microprocessors. However, Web Workers is a draft specification that defines an API to allow Web application authors to spawn background workers running scripts in parallel.There is a German proverb that says "Wer A sagt, muss auch B sagen". In for a penny, in for a pound. If you start something, you have to finish it. If you say A, then you also have to say B.

The WHATWG (Web Hypertext Application Technology Working Group) community has a draft recommendation for Web Workers. This is a work in progress. Besides, the W3C Web Apps WG is also producing this specification. Therefore, we should expect full support for Web Workers in HTML 5.

This specification defines an API for running scripts in the background independently of any user interface scripts. This way, developers can create more responsive Web pages. The long-running scripts can work in the background, in an independent thread and the UI scripts can run on another thread (the main UI thread). The browser is responsible of assigning threads to each Worker instance. A well-designed browser should run each worker in an independent thread, to favor parallelism. As happens with heavyweight threading, Worker instances have a high start-up cost and a high per-instance memory footprint.

The specification allows message-passing as the coordination mechanism. Thus, it allows developers to create multithreaded scripting, capable of exploiting modern multicore microprocessors.

The new API is really very simple. However, it is necessary to understand many multicore, message-passing and threading concepts before trying to use it. The scripts don't use direct threading, however, the Web browsers implementing this API will create independent threads for each new Worker instance. Developers can work with event listeners and direct channels. The direct channels really simplify the communications between Worker instances.

Using Web Workers, the user interface should't be blocked anymore. There's going to be a new way of designing and developing scripts for Web pages. Now, the scripts are also going to be able to take advantage of multicore microprocessors.

Do you have to wait for HTML 5? No, you don't. You can begin testing Web Workers in two Web browsers using JavaScript. FireFox 3.5 and Safari 4 already include support for Web Workers (draft). Therefore, if you are planning to create more responsive and faster scripts for your Web pages, you can begin working right now. Nonetheless, you have to take into account that it is a work in progress. For this reason, the specification might change over time.

There is a very interesting unofficial Web Worker sample test. You can run it using FireFox 3.5 (or greater) and Safari 4 (or greater). It was developed by Dennis Forbes, modifying an original "single-threaded" SunSpider JavaScript Benchmark.

You can select a Repeat Count value and the number of desired Web Workers. As aforementioned, Worker instances have a high start-up cost, therefore it is very important to use 10 as the minimum Repeat Count value. The test performs many heterogeneous algorithms using JavaScript and as many Web Workers as specified.

The following screenshots show the test running with different numbers of Worker instances (from 1 to 4) using a quad-core microprocessor. You can check the graph shown in the Windows Task manager.

Running the test with 1 Worker instance.

Running the test with 2 Worker instances.

Running the test with 3 Worker instances.

Running the test with 4 Worker instances.

Developers will be able to create scalable scripts using Web Workers. Multicore programming is also important for Web developers.

Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 


Video