1

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

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

我们是否应该为每个执行线程提供唯一的上下文/绑定。这可以通过上下文/绑定对池或使用 threadlocal 来完成。这是正确的方法吗?

4

1 回答 1

1

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

graalvm/graaljs存储库包含一些与线程相关的示例。Context您可以在那里(在ExecutorsTest中)看到线程本地的用法。

仅供参考:有一篇关于使用 Graal JavaScript 进行多线程的博客文章可能会澄清您可能遇到的更多问题。

于 2019-04-13T11:29:47.607 回答