Gibt es eine Möglichkeit, Emscripten dazu zu bringen, Daten zwischen Web-Arbeitern und dem Haupt-UI-Thread zu übertragen und nicht zu kopieren?
Emscripten hat eine API, die die Kommunikation zwischen Web Workers verwaltet >, die meiner Meinung nach nur die postMessage
/ onmessage
Mechanismus unter der Haube. Wenn Sie in der Quelle nach der Emscripten Worker-API suchen, scheint es, dass nicht verwendet die Option transferList
, wenn sie postMessage
aufruft, und so werden die Daten kopiert.
Tatsächlich glaube ich, dass es mindestens zweimal kopiert wird: zuerst durch den Browser zwischen den Threads und dann ein zweites Mal von Emscripten , um es in den von Emscripton verwalteten Heap-Space zu bekommen. Und wenn Sie möchten, dass die Daten nach dem Rückruf am empfangenden Ende weiterbestehen, müsste sie ein drittes Mal kopiert werden, da Laut den Dokumenten werden die Daten, die an den Callback übergeben werden, nur während des Callbacks garantiert.
Meine Frage von oben wiederholen: Gibt es eine Möglichkeit, Emscripten dazu zu bringen, all das Kopieren zu vermeiden, indem Daten zwischen Web-Arbeitern und dem Haupt-UI-Thread übertragen und nicht kopiert werden?
Dies ist möglich, wenn Sie SharedArrayBuffer verwenden. Vor kurzem haben die Emscripten-Jungs experimentelle Unterstützung für pthread in Emscripten hinzugefügt, die diese Funktion nutzen. Allerdings unterstützt derzeit nur der Firefox SharedArrayBuffers in der Nacht, so dass dies noch nicht weit verbreitet ist.
Tags und Links javascript c c++ web-worker emscripten