Test case details

Preparation Code

let wrkr = 100; let msgs = 100 * wrkr; // create workers with inline script blobs let script = "onmessage = ({data}) => postMessage({ id: data.id })"; let blob = URL.createObjectURL(new Blob([script])); let workers = Array(wrkr).fill().map(() => new Worker(blob)); // pre-create promises with external resolvers let resolver = Array(msgs).fill(); let promises = Array(msgs).fill().map((_, i) => new Promise(r => resolver[i] = r)); // register promise resolvers on workers workers.forEach(p => p.onmessage = ({data}) => resolver[data.id]());
workers.forEach(w => w.terminate());

Test cases

Test #1

for (let i = 0; i < msgs; i++) { workers[0].postMessage({ id: i }); }; Promise.all(promises).then(() => deferred.resolve());

Test #2

for (let i = 0; i < msgs; i++) { workers[i % (wrkr/10)].postMessage({ id: i }); }; Promise.all(promises).then(() => deferred.resolve());

Test #3

for (let i = 0; i < msgs; i++) { workers[i % wrkr].postMessage({ id: i }); }; Promise.all(promises).then(() => deferred.resolve());