Closures not thread-safe?

João Paulo Varandas joaovarandas at inpaas.com
Mon Feb 20 12:00:17 UTC 2017


Hi Jorg.

Could you send us a code snippet?

I have never seem such problem when using closures. In my project, I use a
single engine for whole web application. My tomcat is running with 150
maxThreads and it seems to be working fine. I test that in each build by
running the test case below:

https://gist.github.com/joaovarandas/f80a9cb5548a9d620e4da1ace2729911

The idea in this test is to use a single engine and run a closure from
one-thread or multiple-threads simultaneously and then read data from those
closures.


PS.: Should I send the source code directly in the mail body for future
readers?





João Varandas
*Arquiteto de Soluções Cloud*
inPaaS - Idéias em Aplicações

p: +55 11 5091-2777  m: +55 11 99889-2321
a: Rua Nebraska, 443 - 1o Andar
  Brooklin Paulista, São Paulo, SP
w: www.inpaas.com  e: joaovarandas at inpaas.com


2017-02-19 18:30 GMT-03:00 Frantzius, Jörg <Joerg.Frantzius at aperto.com>:

> … to correct myself, with code that contains closures, it’s probably
> global-per-thread on a single engine that remains as the least
> resource-consuming option (we were using a single global on single engine
> for all threads, in order to share expensively computed Javascript state
> between them).
>
> From what I understand, global-per-thread could be implemented e.g. by
> having a ThreadLocal<ScriptContext> and always using that as the context in
> ScriptEngine.eval(script, context).
>
> It would be good to know then whether global-per-thread on single engine
> still allows for sharing Nashorn’s code optimization between threads? That
> would already be great (and as Nashorn *is* great, I’m positive here :)
>
> Regards,
> Jörg
>
>
> Am 19.02.2017 um 00:47 schrieb Frantzius, Jörg <Joerg.Frantzius at aperto.com
> <mailto:Joerg.Frantzius at aperto.com>>:
>
> Hi,
>
> it begins to dawn on me that closures aren’t thread-safe, at least that
> would explain crosstalk issues we’re seeing in JMeter tests (with a single
> engine for multiple threads).
>
> It would be good to know (and I guess for others as well) if somebody can
> confirm this?
>
> Perhaps thread-safety of closures was thinkable if Nashorn somehow stored
> closure state in ThreadLocals, but I guess that’s neither happening nor
> planned?
>
> From what I understand, closures are pervasive in Javascript code out
> there, and anybody using such code will currently be forced to use
> engine-per-thread.
>
> Thanks for any hints,
> Jörg
>
>
> ---
>
> Dipl. Inf. Jörg von Frantzius, Technical Director
>
> E-Mail joerg.frantzius at aperto.com<mailto:joerg.frantzius at aperto.com>
>
> Phone +49 30 283921-318
> Fax +49 30 283921-29
>
> Aperto GmbH – An IBM Company
> Chausseestraße 5, D-10115 Berlin
> http://www.aperto.com<http://www.aperto.de/>
> http://www.facebook.com/aperto
> https://www.xing.com/companies/apertoag
>
> HRB 77049 B, AG Berlin Charlottenburg
> Geschäftsführer: Dirk Buddensiek, Kai Großmann, Stephan Haagen, Daniel
> Simon
>
>
>
> ---
>
> Dipl. Inf. Jörg von Frantzius, Technical Director
>
> E-Mail joerg.frantzius at aperto.com
>
> Phone +49 30 283921-318
> Fax +49 30 283921-29
>
> Aperto GmbH – An IBM Company
> Chausseestraße 5, D-10115 Berlin
> http://www.aperto.com<http://www.aperto.de/>
> http://www.facebook.com/aperto
> https://www.xing.com/companies/apertoag
>
> HRB 77049 B, AG Berlin Charlottenburg
> Geschäftsführer: Dirk Buddensiek, Kai Großmann, Stephan Haagen, Daniel
> Simon
>
>

-- 
"Esta mensagem, incluindo seus anexos, pode conter informacoes 
confidenciais e privilegiadas. 
Se voce a recebeu por engano, solicitamos que a apague e avise o remetente 
imediatamente. 
Opinioes ou informacoes aqui contidas nao refletem necessariamente a 
posicao oficial da Plusoft."

"Antes de imprimir, pense em sua responsabilidade e compromisso com o MEIO 
AMBIENTE"



More information about the nashorn-dev mailing list