diff --git a/index.html b/index.html index bf0e674..f550dd1 100644 --- a/index.html +++ b/index.html @@ -90,6 +90,28 @@

Examples

// Spawn a remote reference var r = Parallel.spawn(slowSquare, 100000); +// Call back when done +r.fetch(yourCallBack); + + + + + +

You can even transmit transferable objects:

+ +
+
+var sum = function (n) { 
+    var total = 0; 
+    for (var i=0; i < n.length; ++i) {
+        total += n[i];
+    }
+    return total; 
+};
+
+// Spawn a remote reference
+var r = Parallel.spawn(sum, new Uint8Array([1,2,3]));
+
 // Call back when done
 r.fetch(yourCallBack);
 
diff --git a/js/main.js b/js/main.js index b827998..afb17aa 100644 --- a/js/main.js +++ b/js/main.js @@ -27,6 +27,34 @@ $(function () { r.fetch(check()); }); + + $('#example-5 .btn').click(function () { + var that = this; + + var sum = function (n) { + var total = 0; + for (var i=0; i < n.length; ++i) { + total += n[i]; + } + return total; + }; + + var check = function () { + if (!r.fetch()) { + $(that).siblings('.result').html('Computation started: ' + Math.floor((Date.now() - start) / 1000) + 's ago'); + } else { + return $(that).siblings('.result').html('Result is: ' + r.fetch() + '. Computed in: ' + Math.floor((Date.now() - start) / 1000) + ' seconds.'); + } + + setTimeout(check, 10); + } + + var start = Date.now(); + var r = Parallel.spawn(sum, new Uint8Array([1,2,3])); + + r.fetch(check()); + }); + $('#example-3 .btn').click(function () { var that = this; diff --git a/parallel.js b/parallel.js index 15488f0..54f120f 100644 --- a/parallel.js +++ b/parallel.js @@ -45,7 +45,7 @@ var Parallel = (function () { return isNode ? 'process.on("message", function (m) { process.send({ data : JSON.stringify((' + op + ').apply(process, JSON.parse(m))) }); });' : - 'self.onmessage = function (e) { self.postMessage(JSON.stringify((' + op + ').apply(self, JSON.parse(e.data)))); };'; + 'self.onmessage = function (e) { self.postMessage((' + op + ').apply(self, e.data)); };'; }; var wrapFiles = function (str) { @@ -73,10 +73,11 @@ var Parallel = (function () { }; RemoteRef.prototype.onWorkerMsg = function (e) { - this.ref.data = JSON.parse(e.data); - if (isNode) { + this.ref.data = JSON.parse(e.data); this.ref.worker.terminate(); + } else { + this.ref.data = e.data; } }; @@ -97,7 +98,11 @@ var Parallel = (function () { return function (fn, args) { var r = new RemoteRef(fn); - r.worker.postMessage(JSON.stringify([].concat(args))); + if (isNode) { + r.worker.postMessage(JSON.stringify([].concat(args))); + } else { + r.worker.postMessage([].concat(args)); + } return r; };