Node.js is a Javascript runtime built on Chrome’s V8.
它是一个构建在 Chrome’s V8引擎上的运行时,Node.js并不是一门语言,Javascript才是语言,而Node.js是Javascript的一个run time,类似java语言的jre,是一个运行时,语言在不同的宿主上跑就需要不同的run time,node.js就是一个让JavaScript在服务器端跑起来的run time。但是这么描述也不精确,因为在node.js中不能使用JavaScript的全集比如BOM,DOM,这两个是浏览器上的特性,在服务器端是没有的。
node.js中包含了进行web开发中常用的buffer,srime,http
Node.js uses an event-driven,non-blocking I/O model.
-
非阻塞I/O
阻塞:I/O时进行休眠等待I/O完成后进行下一步
非阻塞:I/O时函数立即返回,进程不等待I/O完成 -
事件驱动
I/O等异步操作结束后的通知
内部的实现方式是观察者模式。
node.js并不是适用于所有的server端场景的,web是node.js最适用的场景。
Node.js的优势 -
前端职责范围变大,统一开发体验
-
在处理高并发,I/O密集场景性能优势明显
CPU密集 vs I/O密集
- CPU密集:压缩,解压,加密,解密。如果一个程序大部分时间是用来做计算,逻辑判断等CPU动作我们就称之为CPU密集。
- I/O密集:文件操作,网络操作,数据库。如果一个程序大部分时间是用来存储设备,网络设施的读取操作我们就称之为I/O密集。
现在计算机运行的指令速度是非常快的,但是 I/O的提速却没那么明显。
web常见场景
- 静态资源读取
- 数据库操作
- 渲染页面
- 高并发:单位时间内访问量特别大
高并发应对方法
- 增加机器数
- 增加每台机器的CPU数—多核
NodeJS的单线程
- 单线程只是针对主进程,I/O操作系统底层多线程调度