top | item 39937358

(no title)

silverlyra | 1 year ago

I believe that day has already come: https://nodejs.org/docs/latest-v20.x/api/worker_threads.html...

When you create a Worker with the worker_threads module, Node spawns a new V8 isolate in the same process: https://github.com/nodejs/node/blob/v20.12.1/src/node_worker...

It’s much more isolation than C threads – the entry point for a thread is a whole module (not a function), and threads must use message passing to communicate. They can share memory, but only via [Shared]ArrayBuffer objects. They're in the same OS process, but each have their own global process object.

But I think it'd meet your need for an in-process isolated execution environment, which you can terminate from the main thread after a timeout.

discuss

order

winrid|1 year ago

Yes, this is what we do today. Was hoping for something a bit more ergonomic when you don't need full module level isolation.

kevingadd|1 year ago

I would be concerned about terminating an isolate on timeout, couldn't it be holding mutexes when you terminate it?

silverlyra|1 year ago

If you use SharedArrayBuffers in worker threads, use Atomics.wait to block, and then terminate the worker which would've called Atomics.notify – yes, if no timeout is used on the notify.

But I don't know of any other way this would happen.

jhgg|1 year ago

V8 isolate termination is more akin to throwing an uncatchable exception, versus killing a thread abruptly. When you ask v8 to terminate an isolate, it does take some time for it to terminate depending on what code is running.