🟢ПАМЯТЬ И ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ В JS. ЧАСТЬ 3
В прошлом посте мы познакомились со структурой данных SharedArrayBuffer и API Atomics.
Давайте быстренько вспомним: SharedArrayBuffer в общем то обычный ArrayBuffer кроме того нюанса, что он может предоставлять одновременный доступ к себе сразу нескольким потокам. Разумеется, если хотя бы один из потоков начинает писать в те ячейки этого буфера, которые читаются из других потоков, то немедленно возникает гонка.
💡 Выносим важную мысль: самое по себе изменяемое состояние не приводит к проблемам - проблемы возникают, когда у нас есть одновременно писатель и читатель.
Вообще, существует специальный контейнер RWLock, который предоставляет к разделяемым данным безопасный интерфейс по контракту: мы можем иметь неограниченное количество читателей, если нет писателя; мы можем иметь одного и только одного писателя, но не читателей. Как видите, выполнение этих двух пунктов гарантирует нам отсутствие гонок при изменении данных. Но как создать такой контейнер? А вот тут нам и понадобятся Atomics.
Давайте напишем его!
Продолжение в статье 👇
https://teletype.in/@kobezzza/AHCsDJbFkEj
В прошлом посте мы познакомились со структурой данных SharedArrayBuffer и API Atomics.
Давайте быстренько вспомним: SharedArrayBuffer в общем то обычный ArrayBuffer кроме того нюанса, что он может предоставлять одновременный доступ к себе сразу нескольким потокам. Разумеется, если хотя бы один из потоков начинает писать в те ячейки этого буфера, которые читаются из других потоков, то немедленно возникает гонка.
Вообще, существует специальный контейнер RWLock, который предоставляет к разделяемым данным безопасный интерфейс по контракту: мы можем иметь неограниченное количество читателей, если нет писателя; мы можем иметь одного и только одного писателя, но не читателей. Как видите, выполнение этих двух пунктов гарантирует нам отсутствие гонок при изменении данных. Но как создать такой контейнер? А вот тут нам и понадобятся Atomics.
Давайте напишем его!
Продолжение в статье 👇
https://teletype.in/@kobezzza/AHCsDJbFkEj