![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/b23/3ae/c71/b233aec713d40d7a43ec913361859e7e.png)
JavaScript по традиции известен как однопоточный язык. Т.е код выполняется последовательно, и одновременное выполнение нескольких задач может быть проблематичным. Если код сталкивается с тяжелыми вычислительными задачами, это может привести к задержкам и замедлению интерфейса юзера. Поэтому один поток не для каких-либо интенсивных вычислений или обработки больших объемов данных.
Чтобы обойти эти ограничения, были введены Web Workers — они позволяют выполнять JS-код в фоновом потоке, параллельно с основным. Однако, все сложилось так, что простой обмен данными между основным потоком и воркерами через postMessage
имеет свои ограничения и может быть недостаточно хорошим для некоторых задач.
Здесь помогают SharedArrayBuffer и Atomics.