3 ms·
In WebAssembly.sh (https://github.com/wasmerio/webassembly.sh https://github.com/wasmerio/webassembly.sh) they run WASM binaries in a Web Worker and then use `S
by benno128 5y ago
In WebAssembly.sh (https://github.com/wasmerio/webassembly.sh https://github.com/wasmerio/webassembly.sh) they run WASM binaries in a Web Worker and then use `SharedArrayBuffer` to block the WebWorker while the main thread does some work (e.g. collect input). You could use a similar solution.
When building Runno (https://runno.dev https://runno.dev) I forked off that project and did a bunch of other things on top to get blocking to work in Safari and non-cross-origin-isolated contexts.
Ultimately I think it's JavaScript's (or whichever host language) responsibility to block when the binary calls out (if that is the expected semantics).
- deleted 5y ago[deleted]
- est31 5y agoDoes the SharedArrayBuffer approach offer any way to tell the OS scheduler to wait? Because the only waiting method I know of is busy waiting, aka wasting cycles at 100% of a CPU core. In normal processes you can call a sleep function, which saves CPU cycles, but there is no synchronous method for that available in javascript.
- benno128 5y agoIt's part of the Atomics feature set (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/wait https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...). You have a shared chunk of memory and you say "please sleep until this memory changes". Then it's up to the host to change that memory.
- est31 5y agoOh that's pretty neat, didn't know about that.