Skip to content

Instantly share code, notes, and snippets.

@ssube
Last active August 29, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ssube/bf9a2af78ea1857c8bbe to your computer and use it in GitHub Desktop.
Save ssube/bf9a2af78ea1857c8bbe to your computer and use it in GitHub Desktop.
webworker-threads slow transfer
var Worker = require('webworker-threads').Worker;
var workerCount = 4, finishedCount = 0, bufferSize = (1024 * 1024 * 4);
var workers = {};
var buffers = {};
function messageReceiver(event) {
var data = event.data;
var id = data.id;
var buffer = data.buffer;
console.log('Received', buffer[0], 'from', id);
workers[id].terminate();
if (++finishedCount === workerCount) {
console.log('All workers finished.');
}
}
for (var i = 0; i < workerCount; ++i) {
console.log('Spawning worker', i);
var worker = new Worker('worker.js');
worker.onmessage = messageReceiver;
workers[i] = worker;
}
console.log('All workers spawned.');
for (var i = 0; i < workerCount; ++i) {
console.log('Allocating buffer', i);
buffers[i] = new ArrayBuffer(bufferSize);
}
console.log('All buffers allocated.');
for (var i = 0; i < workerCount; ++i) {
console.log('Launching worker', i);
var w = workers[i];
var a = buffers[i];
var data = {
id: i,
buffer: new Uint32Array(a)
};
w.postMessage(data, [data.buffer]);
}
console.log('All workers launched.');
function finishWorker(id, buffer) {
console.log('Thread ' + id + ' finished filling buffer.');
var data = {
id: id,
buffer: buffer
};
postMessage(data, [data.buffer]);
}
function fillBuffer(buffer) {
for (var i = 0; i < buffer.byteLength; ++i) {
if (i % (1024 * 1024) === 0) {
console.log('Thread ' + id + ' filled ' + i + ' bytes');
}
buffer[i] = ((Math.random() * 255) | 0) % 255;
}
}
this.onmessage = function (event) {
var id = event.data.id, buffer = event.data.buffer;
console.log('Thread ' + id + ' received buffer of ' + buffer.byteLength);
fillBuffer(buffer);
finishWorker(id, buffer);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment