Native addons are in the same process as node which means all
the benefits and drawbacks that brings.

As you noted, using a child process is good if the child is going to block
since it won't block node.  Also the child process can use a different CPU
core than node for true parallel work.  However there is significant
overhead to having a new process and serializing all data back and forth.
 In process addons are much more efficient but share the same process.  The
C++/JS boundary is somewhat expensive (though nothing like serializing data
across processes).  Once in the main node process it's very bad to block
the process because it defeats the purpose of the event loop if any one
call blocks for a long time.

There is one solution using threads in the addon.  Libuv has APIs to help
with this.  Look at uv_work_t and friends.  The node zlib module uses uv
threads to perform compression in a background thread. <
https://github.com/joyent/node/blob/master/src/node_zlib.cc>

Too much use of the thread pool can be bad for a program, so take all
considerations in moderation.

-Tim Caswell

On Thu, Mar 29, 2012 at 3:49 AM, Felix Halim <[email protected]> wrote:

> Currently, my C++ program communicates with my node.js app via
> stdin/stdout.
> So, my node.js app instantiate my C++ program using child_process and
> use its stdin/stdout.
>
> Recently, I played with node.js addons:
>
> http://nodejs.org/api/addons.html
>
> and discovered that a simple "a + b" program can be up to 50x faster
> implemented as addons
> compared to C++ program that uses scanf / printf and communicate via
> stdin/stdout.
>
> So, I am really motivated to use addons for the communications!
> However, my C++ program has interaction with disk (has to perform I/O).
>
> The current node.js documentation above doesn't have an example
> on how to use addons + libuv to do a non-blocking addons.
>
> Can anyone give a simple example of non-blocking addons?
>
> Thanks,
>
> Felix Halim
>
> --
> 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
>

-- 
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

Reply via email to