- From: Ian Hickson via cvs-syncmail <cvsmail@w3.org>
- Date: Thu, 07 Aug 2008 02:31:02 +0000
- To: public-html-commits@w3.org
Update of /sources/public/html5/workers
In directory hutz:/tmp/cvs-serv13984
Modified Files:
Overview.html
Log Message:
Another example. (whatwg r47)
Index: Overview.html
===================================================================
RCS file: /sources/public/html5/workers/Overview.html,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- Overview.html 6 Aug 2008 22:51:37 -0000 1.39
+++ Overview.html 7 Aug 2008 02:31:00 -0000 1.40
@@ -19,7 +19,7 @@
specification for HTML5</h2>
<h2 class="no-num no-toc" id=editors><!-- "W3C Working Draft" --> Editor's
- Draft <!--ZZZ--> 6 August 2008</h2>
+ Draft <!--ZZZ--> 7 August 2008</h2>
<dl><!-- ZZZ: update the month/day
<dt>This Version:</dt>
@@ -144,7 +144,7 @@
<p>The W3C <a href="http://www.w3.org/html/wg/">HTML Working Group</a> is
the W3C working group responsible for this specification's progress along
- the W3C Recommendation track. <!--ZZZ:--> This specification is the 6
+ the W3C Recommendation track. <!--ZZZ:--> This specification is the 7
August 2008 <!--ZZZ "Working Draft"-->Editor's Draft. <!--:ZZZ--></p>
<!-- UNDER NO CIRCUMSTANCES IS THE PRECEDING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST -->
<!-- relationship to other work (required) -->
@@ -195,11 +195,11 @@
<li><a href="#shared"><span class=secno>1.1.4 </span>Shared
workers</a>
- <li><a href="#granting"><span class=secno>1.1.5 </span>Granting
- capabilities</a>
-
- <li><a href="#delegation"><span class=secno>1.1.6
+ <li><a href="#delegation"><span class=secno>1.1.5
</span>Delegation</a>
+
+ <li><a href="#granting"><span class=secno>1.1.6 </span>Granting
+ capabilities</a>
</ul>
<li><a href="#conformance"><span class=secno>1.2 </span>Conformance
@@ -284,7 +284,7 @@
<pre><!DOCTYPE HTML>
<html>
<head>
- <title>Worker example: Computation</title>
+ <title>Worker example: One-core computation</title>
</head>
<body>
<p>The highest prime number discovered so far is: <output id="result"></output></p>
@@ -777,13 +777,93 @@
<p><a href="http://www.whatwg.org/demos/workers/multiviewer/page.html">View
this example online</a>.
- <h4 id=granting><span class=secno>1.1.5 </span>Granting capabilities</h4>
+ <h4 id=delegation><span class=secno>1.1.5 </span>Delegation</h4>
<p><em>This section is non-normative.</em>
- <p class=big-issue>...
+ <p>With multicore CPUs becoming prevalent, one way to obtain better
+ performance is to split computationally expensive tasks amongst multiple
+ workers. In this example, a computationally expensive task that is to be
+ performed for every number from 1 to 10,000,000 is farmed out to ten
+ subworkers.
- <h4 id=delegation><span class=secno>1.1.6 </span>Delegation</h4>
+ <p>The main page is as follows, it just reports the result:
+
+ <pre><!DOCTYPE HTML>
+<html>
+ <head>
+ <title>Worker example: One-core computation</title>
+ </head>
+ <body>
+ <p>The highest prime number discovered so far is: <output id="result"></output></p>
+ <script>
+ var worker = createWorker('worker.js');
+ worker.onmessage = function (event) {
+ document.getElementById('result').textContent = event.message;
+ };
+ </script>
+ </body>
+</html></pre>
+
+ <p>The worker itself is as follows:
+
+ <pre>// settings
+var num_workers = 10;
+var items_per_worker = 1000000;
+
+// start the workers
+var result = 0;
+var pending_workers = num_workers;
+for (var i = 0; i < num_workers; i += 1) {
+ var worker = createWorker('core.js');
+ worker.postMessage(i * items_per_worker);
+ worker.postMessage((i+1) * items_per_worker);
+ worker.onmessage = storeResult;
+}
+
+// handle the results
+function storeResult(event) {
+ result += 1*event.message;
+ pending_workers -= 1;
+ if (pending_workers <= 0)
+ port.postMessage(result); // finished!
+}</pre>
+
+ <p>It consists of a loop to start the subworkers, and then a handler that
+ waits for all the subworkers to respond.
+
+ <p>The subworkers are implemented as follows:
+
+ <pre>var start;
+function getStart(event) {
+ start = 1*event.message;
+ onmessage = getEnd;
+}
+
+var end;
+function getEnd(event) {
+ end = 1*event.message;
+ onmessage = null;
+ do();
+}
+
+function do() {
+ var result = 0;
+ for (var i = start; i < end; i += 1) {
+ // perform some complex calculation here
+ result += 1;
+ }
+ port.postMessage(result);
+}</pre>
+
+ <p>They receive two numbers in two events, perform the computation for the
+ range of numbers thus specified, and then report the result back to the
+ parent.
+
+ <p><a href="http://www.whatwg.org/demos/workers/multicore/page.html">View
+ this example online</a>.
+
+ <h4 id=granting><span class=secno>1.1.6 </span>Granting capabilities</h4>
<p><em>This section is non-normative.</em>
Received on Thursday, 7 August 2008 02:31:36 UTC