Graal Javascript - 线程安全

Graal Javascript - thread safety

在多线程应用程序(例如每个 servlet 请求)中使用 Graal.js 的推荐方法是什么?我们这样使用 Graal.js

jsContext = Context.newBuilder("js").allowAllAccess(true).build();
bindings = jsContext.getBindings("js");
jsContext.eval("js", jsCodeString);

我们是否应该为每个正在执行的线程设置一个唯一的 Context/binding。这可以通过 Context/Binding 对池或使用 threadlocal 来完成。这是执行此操作的正确方法吗?

您不应同时从多个线程访问一个 Context。因此,您提出的解决方案(Contexts 池或本地线程 Contexts)是有效的方法。

graalvm/graaljs 存储库 contains some threading-related examples. You can see the usage of a thread-local Context there (in ExecutorsTest).

仅供参考:blog-post 关于使用 Graal JavaScript 的多线程可能会澄清您可能有的进一步问题。