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
