SharedArrayBuffer?SharedArrayBuffer — это буфер бинарных данных фиксированного размера, который, в отличие от обычного ArrayBuffer, можно одновременно использовать в нескольких контекстах выполнения — например, в основном потоке и Web Workers — без копирования данных.
ArrayBufferArrayBuffer должен быть передан (перемещён) между потоками, что делает его недоступным в исходном контекстеSharedArrayBuffer одновременно доступен всем потокам, у которых есть ссылка на негоAtomicsПоскольку несколько потоков могут одновременно читать и писать в одну и ту же память, гонки данных становятся реальной проблемой. API Atomics решает это, предоставляя:
Atomics.wait() и Atomics.notify()Atomics.add(sharedArray, index, value); // потокобезопасное увеличение
SharedArrayBuffer был отключён во всех основных браузерах после обнаружения уязвимости Spectre в 2018 году. Атаки типа Spectre используют высокоточные таймеры — которые эффективно обеспечивает общая память — для утечки конфиденциальных данных через границы памяти.
Чтобы снова включить SharedArrayBuffer, твоя страница должна быть cross-origin isolated, что достигается установкой следующих HTTP-заголовков ответа:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Это ограничивает доступ страницы к кросс-origin ресурсам, значительно сужая поверхность атак Spectre.
SharedArrayBuffer лучше всего подходит для производительно-критичных многопоточных задач, таких как:
SharedArrayBuffer позволяет нескольким потокам одновременно обращаться к одному и тому же месту в памяти, тогда как стандартный ArrayBuffer должен передаваться между потоками и становится недоступным в исходном контексте.
Новый — ещё не проверен сообществом
Вы