Can't get Multithreaded Nashorn uses to Scale

Jesus Luzon jluzon at riotgames.com
Tue Dec 6 12:45:11 UTC 2016


Hey folks,

I've tried many different ways of using Nashorn multithreaded based on what
I've found on the internet and I still can't get a single one to scale.
Even the most naive method of making many script engines with my script
tends to bottleneck itself when I have more than 10 threads invoking
functions.

I'm using the following code to compile my script and
invocable.invokeFunction("transform", input) to execute:

>     static Invocable generateInvocable(String script) throws
> ScriptException {
>         ScriptEngineManager manager = new ScriptEngineManager();
>         ScriptEngine engine =
> manager.getEngineByName(JAVASCRIPT_ENGINE_NAME);
>         Compilable compilable = (Compilable) engine;
>         final CompiledScript compiled = compilable.compile(script);
>         compiled.eval();
>         return (Invocable) engine;
>     }


The script I'm compiling is:

>         String script = "function transform(input) {" +
>                 "var result = JSON.parse(input);" +
>                 "response = {};\n" +
>                 "for (var i = 0; i < result.length; i++) {\n" +
>                 "    var summoner = {};\n" +
>                 "    summoner.id = result[i].id;\n" +
>                 "    summoner.name = result[i].name;\n" +
>                 "    summoner.profileIconId = result[i].profileIconId;\n" +
>                 "    summoner.revisionDate = result[i].revisionDate;\n" +
>                 "    summoner.summonerLevel = result[i].level;\n" +
>                 "    response[summoner.id] = summoner;\n" +
>                 "}\n" +
>                 "result = response;" +
>                 "return JSON.stringify(result);" +
>                 "};";


I've also tried other more scaleable ways to work with scripts
concurrently, but given that this is the most naive method where everything
is brand new and I still get slowness calling them concurrently I fear that
maybe I'm overlooking something extremely basic on my code.

Thanks.
-Jesus Luzon


More information about the nashorn-dev mailing list