Node.jsNode.js简介

Node.js不是一律宗新的编程语言,是基于Chrome
JavaScript运行时确立的一个平台,使用C++编写的,是针对Google Chrome
V8引擎进行了打包,它根本用来创造快速的、可扩大的网络应用.Node.js使用非阻塞的,事件驱动的
I/O 操作来保持以处理越平台 (across distributed devices)
数据密集型实时应用时之翩翩高效.

基础知识

Node.js 是谷歌 V8 引擎、libuv平台抽象层 以及核心行使 Javscript
编写的核心库三者集合的一个包外壳.

Node.js内部结构:

Node.js.png

顶层是API调用,就是开被起的工作代码;
中间层将JavaScript与底层执行中举行了绑定操作;
底层的V8是Google
开源之大性能 JavaScript 引擎,它以 JavaScript
代码转换成机器码,然后实施,因此进度好快.V8 以 C++ 语言开发,Google 的
Chrome 浏览器正是用的 V8 引擎.

libuv透过C
语言开发,内部管理着一个线程池。在这个基础之上,提供事件循环(Event
Loop)、异步网络 I/O、文件系统 I/O等能力.

外底层依赖库如
c-ares、crypto
(OpenSSL)、http-parser
以及
zlib,这些靠提供了针对系底层功能的拜访,包括网络、压缩、加密等.

事件循环

Node.js
包含一个风波循环,Node.js中所有的逻辑都是事件之回调函数,Node.js始终以波循环中,程序入口即是事件循环第一独事件之回调函数.事件之回调函数中或会见来I/O请求或直接发射(
emit)事件,执行了后归来事件循环.事件循环会检查事件队列中生出没有发出不处理的轩然大波,直到程序结束.Node.js的风波循环对开发者不可见,由libuv库实现,libuv不断检查是否发运动的、可供应检测的事件监听器,直到检查不交常才脱离事件循环,程序结束.

EventLoop.png

适用场景

1.RESTful API
就是称 Node
的出色图景,因为你得构建它来拍卖数万长达连接。它还未需大量逻辑;它实质上只是从某个数据库被找找一些值并以它构成一个应。由于响应是为数不多文件,入站请求也是为数不多底文书,因此流量不高,一华机器还也得拍卖极其忙的营业所的
API 需求.

2.实时常先后
闲话应用程序是最能体现 Node.js
优点的例证:轻量级、高流量并且能好的答问跨平台设备上运行密集型数据(虽然算能力低)。同时,聊天吗是一个不胜值得学习之用例,因为其可怜简单,并且带有了目前为止一个杰出的
Node.js 会用到之大部分解决方案.

3.单页APP
ajax很多。现在单页的体制似乎非常流行,比如phonegap做下的APP,一个页面包打天下的事例不胜枚举。

Node.js不会发生死锁,因为Node.js是单线程,避免了往往之线程切换出,没有沿,支持异步I/O读取密集型的操作,不抱CPU运算密集型的操作,否则出现以下状态,计算时间了长,导致整程序陷入了假死状态.

0304004.png

参考链接
Node.js
究竟是啊?
Node.js软肋之CPU密集型任务
Node.js机制及原理了然起来