Re: Threading and runtime / context sharing

[email protected] Mon, 20 Nov 2017 21:15:58 -0800 (PST)
Newsgroups gmane.comp.mozilla.devel.jseng
Message-ID <[email protected]>
On Monday, 13 November 2017 17:08:35 UTC+11, Dmitri  wrote:
> Hi, 
> 
> I am trying to understand if it is possible to share compiled scripts between threads. 
> 
> In SM 1.7 we had a single cache of compiled scripts used directly by X number of threads. That worked very well and significantly improved the performance of our application. 
> 
> SM 24 doesn't allow mixing compilation and execution threads anymore. 
> A simple solution would be to have a copy of the cache per each X thread. However, that consumes lots of memory and doesn't scale. 
> 
> Is it possible to have a pool of Y threads to serve "JS requests" from X threads? 
> 
> Let's for example, Y = 1, X = 2. Y thread would create a triplet of JSRuntime, JSContext, and Global object. Then it would create X1 and X2 objects and would associate compartments with X1, X2. 
> X1 and X2 would be children of the global object. 
> 
> To compile a script: 
> JS::Compile(cx, options, srcBuf, script);  - SM 45 or 
> JS::Compile(cx, global_obj, options, srcBuf, script); - SM before 39 
> 
> Does it matter what compartment is used for compilation? 
> 
> To execute a script for thread_Xi: 
> JS_EnterCompartment(cx, Xi); 
> JS_ExecuteScript(cx, scopeChain, script); //scopeChain starts with has Xi 
> JS_LeaveCompartment(cx, oldCompartment); 
> 
> Will that work? If so will that protect X1 data from X2 code? Or X2 code will be able to walk up the scope chain, access global_obj and then access Xi scope chain? 
> 
> thanks, 
> -Dmitri 
> 
> On Saturday, 29 July 2017 04:52:24 UTC+10, Bill McCloskey  wrote:
> > Brian Hackett is the expert since he wrote all the recent threading code. I
> > think it would help to ask a more concrete question, though.
> > 
> > -Bill
> > 
> > On Fri, Jul 28, 2017 at 11:12 AM, Bobby Holley
> > wrote:
> > 
> > > The landscape of this code has changed significantly since the above posts
> > > on this thread. Bill (CCed) is the right person to ask about it now.
> > >
> > > On Fri, Jul 28, 2017 at 8:38 AM,  wrote:
> > >
> > >> Hi Bobby, I came to this thread because I'm having the same issue like
> > >> Robin. I have been working with spidermokey as a embeddable engine since
> > >> versión 1.5 (currently porting some develop from 1.8.5 to 24).  For years I
> > >> avoided to use v8 as an alternative engine because the limitation in
> > >> multithreading environment and I will be glad to work in this issue to keep
> > >> me, and all others developers, away from other engines.
> > >> So, some mentoring will be welcome.
> > >>
> > >> On Tuesday, July 28, 2015 at 4:11:12 PM UTC-3, Bobby Holley wrote:
> > >> > On Mon, Jul 27, 2015 at 10:48 PM, Terrence Cole 
> > >> wrote:
> > >> >
> > >> > > I think it is still presumed to be slow, so is rarely used; at least
> > >> this
> > >> > > is the case in the GC. The GC's main use at the moment is for making
> > >> > > assertions about global state in deep call stacks where it's
> > >> cumbersome to
> > >> > > thread a context, particularly if it has to be debug-only.
> > >> > >
> > >> >
> > >> > Great.
> > >> >
> > >> >
> > >> > >
> > >> > >
> > >> > >> If so, I think we should do that (to avoid more dependencies), which
> > >> has
> > >> > >> the added benefit of solving Robin's problem.
> > >> > >>
> > >> > >
> > >> > > I think this is a reasonable plan, although, as with anything
> > >> threading
> > >> > > related, caution is warranted lest we end up back in the dire
> > >> straights
> > >> > > that caused us to go strictly single-threaded in the first place.
> > >> > >
> > >> >
> > >> > I'm not suggesting a change to the threading model. I'm just suggesting
> > >> > that we do all of our threading operations (TLS lookups, "are we on this
> > >> > thread", etc) indirectly via a virtual methods on an interface that the
> > >> > embedder implements.
> > >> >
> > >> > Doing this sooner rather than later will probably make our lives easier
> > >> in
> > >> > the long run. Robin, would you be willing to do this if someone mentors
> > >> you?
> > >>
> > >> _______________________________________________
> > >> dev-tech-js-engine mailing list
> > >> [email protected]
> > >> https://lists.mozilla.org/listinfo/dev-tech-js-engine
> > >>
> > >
> > >

I run few tests with SM 45. Yes, it is possible to have a JS thread that serves JS execution requests from few other threads. To separate data I created few global objects and run client requests in separate compartments.
_______________________________________________
dev-tech-js-engine mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine