javascript — передача данных с использованием Emscripten Worker API без копирования

Есть ли способ заставить Emscripten передавать, а не копировать данные между веб-работниками и основным потоком пользовательского интерфейса?

Emscripten имеет API, который управляет связью между веб-работниками, который я считаю, просто использует postMessage / onmessage механизм под капотом. Глядя в источник для Emscripten Worker API, кажется, что это не использовать transferList вариант, когда он вызывает postMessageи поэтому данные копируются.

На самом деле, я думаю, что это копируется по крайней мере дважды: сначала браузером между потоками, а затем второй раз от Emscripten чтобы получить его в управляемом Emscripten пространстве. И если вы хотите, чтобы данные продолжали существовать на принимающей стороне после обратного вызова, их нужно будет скопировать в третий раз, так как в соответствии с документами данные, переданные в обратный вызов, гарантированно существуют только во время обратного вызова.

Повторяю мой вопрос сверху: есть ли способ получить Emscripten, чтобы избежать всего этого копирования путем передачи, а не копирования данных между веб-работниками и основным потоком пользовательского интерфейса?

8

Решение

Это возможно, если вы используете SharedArrayBuffer. Недавно ребята из Emscripten добавили экспериментальная поддержка pthread в Emscripten, которые используют эту функцию. Однако в настоящее время только Firefox поддерживает SharedArrayBuffers ночью, так что пока это не получило широкого распространения.

1

Другие решения


По вопросам рекламы [email protected]