Я хотел бы спросить, как динамически увеличить длину SharedArrayBuffer.
Из MDN веб-документов (выделено) .
"Объект SharedArrayBufferиспользуется для представления универсального буфера необработанных двоичных данных фиксированной длины, аналогичного объекту ArrayBuffer, но таким образом, что их можно использовать для создания представлений в общей памяти. "
Фиксированная длина означает, что вы не можете изменить его размер ... поэтому неудивительно, что у него нет метода resize ().
(Примечание: одна вещьэто приходит мне в голову, хотя я полагаю, что существует совершенно новая возможность для SharedArrayBuffer использоваться в WebAssembly в качестве «линейной памяти» с оператором grow_memory
.очень трудно, если это вообще возможно, и, вероятно, не будет поддерживаться во многих браузерах, если бы это было так.)
Я попытался реализовать это в цепочке,сохранение объекта SharedArrayBuffer в другом объекте SharedArrayBuffer, но браузер делаетне допустить этого.
Нет.Вы можете писать только числа.
Может показаться, что вы можете использовать число для индексации в таблице SharedArrayBuffers и связать их таким образом.Но тогда вам нужно беспокоиться о том, как разделить эту таблицу между потоками - та же проблема.
Так что, независимо от того, что вы делаете, какой бы поток не принял решение обновить структуру общей буферизации, он должен будет уведомить других ообновление как-то.Чтобы это уведомление могло передавать SharedArrayBuffers, оно должно будет использовать postMessage для этого.
Рассматривали ли вы эксперимент с выделением большего SharedArrayBuffer для начала и рассматривали его как кольцевой буфер так, чтобы основной поток считывал из записей, которые делают подпотоки, в шаблоне «производитель / потребитель»?
Если вы настаиваете на реализации изменения размера, вы можете рассмотреть вопрос о том, чтобы некоторая часть буфера содержала индикатор того, что он «устарел», и новый поток должен быть запрошен из потока, который его изменил.Вам придется контролировать это с помощью синхронизации.Если вы сделаете небольшую выборку, которая сделает это, она, вероятно, станет хорошей технической статьей ... и если у вас возникнут проблемы с небольшой выборкой, это будет хорошей основой для дальнейших вопросов здесь.