On Sat, Jan 11, 2014 at 4:52 PM, Andreas Schlegel < schlegel.andr...@gmail.com> wrote:
> > Contexts and threads don't have much to do with each other. If you > > ignore a couple of things, a JSRuntime is always in a single thread and > > all JSContexts of that runtime are in the same thread. If you have > > multiple threads, you need a runtime for each, and each runtime will > > use one or more of its own JSContexts. > Ok, thats new for me, because I read the following from > JSAPI_basics-Dokumentation: > "There is a close association between contexts and threads. Simple, > single-threaded applications can use a single context for everything. > But each context can only do one thing at a time, so in a multithreaded > application, only one thread at a time should use any given context. > Such an application typically has one context per thread." > Yeah, so our documentation is sometimes ... lacking. Or outdated. Or, most frequently, both. SpiderMonkey used to be fully multi-threaded and was able to execute multiple JS scripts in parallel in the same runtime. Quite a while ago, that capability was removed, because it became a maintenance nightmare and hindered cleanup and progess. I have just removed the section from the documentation: afaict, it's entirely false and doesn't even need replacement. > > But if each Thread has its own runtime, how is it possible to access > variables from different threads? Because the documentation says that > each "/runtime/, is the space in which the JavaScript variables, > objects, scripts, and contexts used by your application are allocated". > It's not possible. Objects have to be cloned or transferred from one runtime to the other. That's what happens when postMessage is used to send data to or from a DOM Worker. > >> If I have a multi-threaded application and the object has an other > >> Context as the default is this correct or not? If not how can I get the > >> correct? > Regardless of the threading stuff, objects don't belong to contexts at all. They belong to compartments and can only be accessed if that compartment has been entered. To refer to objects from other compartments, a cross-compartment wrapper has to be created. I would recommend dealing with that after your changes work within a single global object. _______________________________________________ dev-tech-js-engine-internals mailing list dev-tech-js-engine-internals@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals