#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, которое может прояснить дополнительные вопросы, которые у вас могут возникнуть.