<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <link type="image/x-icon" rel="icon" href="../favicon.ico">
    <link type="image/x-icon" rel="shortcut icon" href="../favicon.ico">
    <link rel="stylesheet" href="../pipe.css">
    <link rel="stylesheet" href="../sh.css">
    <link rel="alternate"
          type="application/rss+xml"
          title="node blog"
          href="http://feeds.feedburner.com/nodejs/123123123">
    <title>node.js</title>
  </head>
  <body class="alt int" id="about">
    <div id="intro" class="interior">
        <a href="/" title="Go back to the home page">
            <img id="logo" src="http://nodejs.org/images/logo-light.png" alt="node.js">
        </a>
    </div>
    <div id="content" class="clearfix">
            <div id="column2" class="interior">
                <ul>
                    <li><a href="/" class="home">Home</a></li>
                    <li><a href="/download/" class="download">Download</a></li>
                    <li><a href="/about/" class="about current">About</a></li>
                    <li><a href="http://npmjs.org/" class="npm">npm Registry</a></li>
                    <li><a href="http://nodejs.org/api/" class="docs">Docs</a></li>
                    <li><a href="http://blog.nodejs.org" class="blog">Blog</a></li>
                    <li><a href="/community/" class="community">Community</a></li>
                    <li><a href="/logos/" class="logos">Logos</a></li>
                    <li><a href="http://jobs.nodejs.org/" class="jobs">Jobs</a></li>
                </ul>
                <p class="twitter"><a href="http://twitter.com/nodejs">@nodejs</a></p>
            </div>

            <div id="column1" class="interior">
                <h1>Node's goal is to provide an easy way to build scalable
              network programs</h1>


              <p>In the "hello world" web server example
              below, many client connections can be handled concurrently.
              Node tells the operating system (through <code>epoll</code>,
              <code>kqueue</code>, <code>/dev/poll</code>, or
              <code>select</code>) that it should be notified when a new
              connection is made, and then it goes to sleep. If someone new
              connects, then it executes the callback. Each connection is
              only a small heap allocation.</p>

              <pre>
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');</pre>
              <p>This is in contrast to today's more common concurrency
              model where OS threads are employed. Thread-based networking
              is relatively inefficient and very difficult to use. See: <a
                href="http://www.kegel.com/c10k.html">this</a> and <a
                href="http://bulk.fefe.de/scalable-networking.pdf">this</a>.
              Node will show much better memory efficiency under high-loads
              than systems which allocate 2mb thread stacks for each
              connection. Furthermore, users of Node are free from worries
              of dead-locking the process—there are no locks. Almost no
              function in Node directly performs I/O, so the process never
              blocks. Because nothing blocks, less-than-expert programmers
              are able to develop fast systems.</p>

              <p>Node is similar in design to and influenced by systems like
              Ruby's <a href="http://rubyeventmachine.com/">Event
                Machine</a> or Python's <a
                href="http://twistedmatrix.com/">Twisted</a>. Node takes the
              event model a bit further—it presents the event loop as a
              language construct instead of as a library. In other systems
              there is always a blocking call to start the event-loop.
              Typically one defines behavior through callbacks at the
              beginning of a script and at the end starts a server through a
              blocking call like <code>EventMachine::run()</code>. In Node
              there is no such start-the-event-loop call. Node simply enters
              the event loop after executing the input script. Node exits
              the event loop when there are no more callbacks to perform.
              This behavior is like browser javascript—the event loop is
              hidden from the user.</p>

              <p>HTTP is a first class protocol in Node. Node's HTTP library
              has grown out of the author's experiences developing and
              working with web servers. For example, streaming data through
              most web frameworks is impossible. Node attempts to correct
              these problems in its HTTP <a
              href="https://github.com/joyent/http-parser/tree/master">parser</a>
              and API. Coupled with Node's purely evented infrastructure, it
              makes a good foundation for web libraries or frameworks.</p>

              <p>But what about multiple-processor concurrency? Aren't
              threads necessary to scale programs to multi-core computers?
              You can start new processes via <code><a
              href="http://nodejs.org/api/child_process.html#child_process.fork">child_process.fork()</a></code>
              these other processes will be scheduled in parallel. For load
              balancing incoming connections across multiple processes use
              <a href="http://nodejs.org/api/cluster.html">the
              cluster module</a>.</p>

            <p>See also:</p>
            <ul>
                <li><a href="http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf">Slides from JSConf 2009</a></li>
                <li><a href="http://nodejs.org/jsconf2010.pdf">Slides from JSConf 2010</a></li>
                <li><a href="http://www.yuiblog.com/blog/2010/05/20/video-dahl/">Video from a talk at Yahoo in May 2010</a></li>
            </ul>
        </div>
</div>
    <div id="footer">
        <a href="http://joyent.com" class="joyent-logo">Joyent</a>
        <ul class="clearfix">
            <li><a href="/">Node.js</a></li>
            <li><a href="/#download">Download</a></li>
            <li><a href="/about/">About</a></li>
            <li><a href="http://npmjs.org/">npm Registry</a></li>
            <li><a href="http://nodejs.org/api/">Docs</a></li>
            <li><a href="http://blog.nodejs.org">Blog</a></li>
            <li><a href="/community/">Community</a></li>
            <li><a href="/logos/">Logos</a></li>
            <li><a href="http://jobs.nodejs.org/">Jobs</a></li>
            <li><a href="http://twitter.com/nodejs" class="twitter">@nodejs</a></li>
        </ul>

        <p>Copyright <a href="http://joyent.com/">Joyent, Inc</a>, Node.js is a <a href="/trademark-policy.pdf">trademark</a> of Joyent, Inc. View <a href="https://raw.github.com/joyent/node/__VERSION__/LICENSE">license</a>.</p>
    </div>


    <script src="../sh_main.js"></script>
    <script src="../sh_javascript.min.js"></script>
    <script>highlight(undefined, undefined, 'pre');</script>

    <script>
      window._gaq = [['_setAccount', 'UA-10874194-2'], ['_trackPageview']];
      (function(d, t) {
        var g = d.createElement(t),
            s = d.getElementsByTagName(t)[0];
        g.src = '//www.google-analytics.com/ga.js';
        s.parentNode.insertBefore(g, s);
      }(document, 'script'));
    </script>

  </body>
</html>
