Wow, great! Lot of thanks!
C уважением, Александр Лозовюк
CTO at TRData Limited
Alpha-Beta-Release Blog

http://abrdev.com
https://trdata.com


2014-03-31 8:21 GMT+03:00 Forrest Norvell <[email protected]>:
> The closest thing to documentation of the implementation is the
> implementation itself, but as that's scattered across a whole bunch of
> source files, it's not too useful.
>
> Here are some semi-organized notes in lieu of actual documentation:
>
> There are no modifications to V8 for domains. src/node.cc was modified in
> Node 0.10 to have a new global exception-handler that the domain system can
> hook into, which replaces process.on('uncaughtException'). Node 0.12 will
> have some further changes to the C++ side of Node (mostly related to the
> new, still-private asyncListener API), but even still, they don't reach into
> the V8 codebase. Node just consumes the V8 embedding API; with some very
> rare exceptions, it doesn't touch V8's internals at all.
> The changes to Node are primarily in two categories:
>
> To ensure the domain is properly propagated across asynchronous call stacks.
> To ensure that EventEmitters created and run inside domains are attached to
> the correct domain.
>
> The original implementation of domains, from Node 0.8, was built atop
> process.on('uncaughtException'). Trevor Norris reworked it fairly heavily
> for Node 0.10, making changes all the way down to the C++ level, in the
> interest of reducing the overhead imposed by domains. In particular, he
> bifurcated the code paths used for the Node event loop so there are separate
> versions for when domains aren't / are in use. Requiring the domains module
> switches between the two paths, essentially making domains free when you're
> not using them.
> Even with Trevor's changes, the vast bulk of the domain API is implemented
> in pure JavaScript, in src/node.js, lib/domain.js, and lib/events.js.
> The basic mechanism is pretty simple: take the function provided to d.run()
> or d.bind(), wrap it in a closure, make calls to d.enter() and d.exit()
> before and after running the function when the closure is invoked. All the
> other mechanisms are there to ensure that the correct domain is available
> across asynchronous boundaries in case of errors.
> The trickiest bits to understand are all of the implicit bindings that
> happen around EventEmitters / Sockets / HTTP requests and responses and
> domains. It's convenient in that you don't have to remember to add all these
> EEs to the domain, but there's some subtle stuff going on.
> Probably the most counterintuitive part of domains' implementation is the
> way nested domains interact -- if you enter a domain from inside a domain,
> and then exit the containing domain, the contained domain will be exited as
> well. This is similar to how try / catch / finally deals with the call stack
> in the synchronous case, but it may not be what you expect.
>
> The rest of the details can be figured out from reading the source
> (although, especially in 0.10, it may take a few readthroughs before
> everything starts to come together). I've suggested writing some design
> documents to capture some of these details, and there was general agreement
> that that would be useful, but somebody's gotta find the time to write all
> this stuff down, and nobody's done it (yet).
>
> Hope this is helpful!
>
> F
>
>
> On Sun, Mar 30, 2014 at 8:27 PM, ming <[email protected]> wrote:
>>
>> Hi,
>> Do you know of any documentation(s) about how domains are implemented in
>> Node.js?  In particular, what changes were introduced in Node.js and the
>> underlying Google V8 engine (if any) for the implementation of domains?
>>
>> Thanks.
>>
>>
>> --
>> --
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines:
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "nodejs" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nodejs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to