Welcome to the nodeBooks wiki! Enjoy it :-D

# 何谓nodejs

![](http://static.oschina.net/uploads/space/2012/0207/142019_SSyR_28.png)


其[官网](https://nodejs.org)这样称道:

>Node.js® is a platform built on [Chrome's JavaScript runtime](https://code.google.com/p/v8/)(V8引擎) for easily building fast, scalable(可扩展) network applications. Node.js uses an event-driven(事件驱动), non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications(数据密集型实时应用) that run across distributed(分布式) devices.

从这里我们知道：

- Node.js 是Google的V8虚拟机构建的一个开发平台，来解释和执行JavaScript代码.
- Node.js因为采用了Google Chrome浏览器的V8引擎，性能很好，同时还提供了很多系统级的API，如文件操作、网络编程等。浏览器端的Javascript代码在运行时会受到各种安全性的限制，对客户系统的操作有限。相比之下，Node.js则是一个全面的后台运行时，为Javascript提供了其他语言能够实现的许多功能。
- **Node.js 不是一门编程语言而是一个开发平台**
- **Node.js采用C++语言编写而成，是一个Javascript的运行环境(是一个后端的Javascript运行环境),而不是js的一个应用**

Chrome浏览器和Node的组件构成图如下：

![](http://beginman.qiniudn.com/chrome_node.png)

# Node.js的特点

>**注：** 我学nodejs的初衷就是在理解Tornado 异步机制受挫了，准备在node身上学点啥，结合Unix程序设计原理，再回顾之前学的tornado和各种异步框架.....

- Node.js采用事件驱动、异步编程，为网络服务而设计
- Node.js采用**单进程，单线程模式运行**，同js运行模式一样

>事件驱动机制是Node.js通过内部单线程高效率地维护事件循环队列来实现的，没有多线程的资源占用和上下文切换，这意味着面对大规模的http请求，Node.js凭借事件驱动搞定一切，习惯了传统语言的网络服务开发人员可能对多线程并发和协作非常熟悉，但是面对Node.js，我们需要接受和理解它的特点。由此我们是否可以推测出这样的设计会导致负载的压力集中在CPU（事件循环处理？)

**既然Node.js采用单进程、单线程模式，那么在如今多核硬件流行的环境中，单核性能出色的Node.js如何利用多核CPU呢？创始人Ryan Dahl建议，运行多个Node.js进程，利用某些通信机制来协调各项任务。**


参考：

[深入浅出Node.js（一）：什么是Node.js](http://www.infoq.com/cn/articles/what-is-nodejs)




