UnAsync
Synchronously execute asynchronous functions on browsers, Node.js, and Deno.
This package is a successor of synckit and sync-threads.
Usage
This package provides two functions runAsWroekr
and createSyncFn
.
- Wrap an asynchronous function by
runAsWorker
- Create a synchronous function by
createSyncFn
//worker.js
import { runAsWorker } from "unasync";
runAsWorker(async (x) => {
await new Promise((resolve) => setTimeout(() => resolve(1), 1000));
return x + 1
})
//main.js
import { createSyncFn } from "unasync";
const syncFn = createSyncFn(new URL("./worker.mjs", import.meta.url))
console.log(syncFn(1)) // 2
syncFn.dispose() // terminate the worker thread
Technical Details
In the modern JavaScript platform, we can use shared memory SharedArrayBuffer
.
we employ it as a semaphore. First, we lock the semaphore to suspend the main thread
and run the asyncrhonous function in the worker thread.
After the execution, we unlock the semaphore to resume the main thread.
The strong point of this idea, we do not need to modify event-loop in the target virtual machine by FFI.
Copyright and License
(c) 2022 TANIGUCHI Masaya, MIT License