Graal Javascript — безопасность потоков

#javascript #java #multithreading #graalvm #graaljs

#javascript #java #многопоточность #graalvm #graaljs

Вопрос:

Каков рекомендуемый способ использования Graal.js в многопоточном приложении (например, по запросу сервлета)? Мы используем Graal.js вот так

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

Должны ли мы иметь уникальный контекст / привязку для каждого выполняющегося потока. Это может быть достигнуто с помощью пула пар контекста / привязки или с помощью threadlocal . Это правильный способ сделать это?

Ответ №1:

Вы не должны обращаться к одному Context из нескольких потоков одновременно. Итак, решения, которые вы предлагаете (пул Context ов или локальные Context ов потоков), являются допустимыми способами сделать это.

graalvm/graaljs репозиторий содержит несколько примеров, связанных с потоками. Вы можете увидеть использование локального потока Context там (в ExecutorsTest).

К вашему сведению: есть сообщение в блоге о многопоточности с Graal JavaScript, которое может прояснить дополнительные вопросы, которые у вас могут возникнуть.