Now we know the reason for our garbage value, and, with atomics, it should be easy to fix the problem. Right? Wrong.
There is a massive performance penalty on using atomic locking a billion times. Let's look at our updated worker.js code now:
// worker.jslet sharedMem;addEventListener('message', ({data}) => { //console.log(data); if(data.message == 'sab') { sharedMem = data.memory; console.log('Memory ready'); } if(data.cmd == 'start') { console.log('Iterations ready'); startCounting(data.iterations); }});function startCounting(limit) { const arr = new Uint32Array(sharedMem); for(let i=0;i<limit;i++) { Atomics.add(arr, 0, 1); } postMessage('done')}
This is similar to our previous implementation of the ...