Florian Rappl
Sequential implementation
Naive parallel implementation
Lock critical regions
Global synchronization
window.addEventListener('message', function (ev) {
ev.source.postMessage('Howdy Cowboy!', ev.origin);
}, false);
var popup = window.open(/* ... */);
popup.postMessage('Hello World!', '*');
Worker
SharedWorker
ServiceWorker
var fs = (function () {
postMessage('Hello World');
}).toString();
var blob = new Blob(
[fs.substr(13, fs.length - 14)],
{ type: 'text/javascript' }
);
var url = window.URL.createObjectURL(blob);
var worker = new Worker(url);
worker.addEventListener('message', function (ev) {
console.log(ev.data);
}, false);
Promise
to avoid callback hellvar p1 = new Parallel('Hello World!');
var p2 = new Parallel([1, 2, 3, 4, 5]);
p1.spawn(data => data.split('').reverse().join(''));
p2.spawn(data => data.length).then(data => console.log(data));
var p1 = new Parallel([1, 2, 3, 4, 5]);
p1.map(element => Math.exp(element * 0.1));
var p2 = new Parallel(_.range(100));
p2.reduce(elements => elements[0] + elements[1]));
var p = new Parallel([ /* ... */ ], {
env: { a: 10 }, envNamespace: 'parallel'
});
function factorial (n) { /* ... */ }
p.require(factorial);
SIMD.Float32x4
SIMD.Float64x2
SIMD.Uint32x4
SIMD.Int16x8
var a = SIMD.Float32x4(1, 2, 3, 4);
var b = SIMD.Float32x4(5, 6, 7, 8);
var sum = SIMD.Float32x4.add(a, b);
var reversed = SIMD.Float32x4.swizzle(b, 3, 2, 1, 0);
var difference = SIMD.Float32x4.sub(reversed, a);
var mixed = SIMD.Float32x4.shuffle(a, b, 0, 2, 5, 7);