1. Node能够解决什么问题? #

Node的首要目标是提供一种简单的,用于创建高性能服务器的开发工具
Web服务器的瓶颈在于并发的用户量,对比Java和Php的实现方式

Node在处理高并发,I/O密集场景有明显的性能优势 #

Web主要场景就是接收客户端的请求读取静态资源和渲染界面,所以Node非常适合Web应用的开发。

2.Node是什么? #

Node.js是一个基于 Chrome V8 引擎的JavaScript运行环境(runtime),Node不是一门语言是让js运行在后端的运行时,并且不包括javascript全集,因为在服务端中不包含DOMBOM,Node也提供了一些新的模块例如http,fs模块等。Node.js 使用了事件驱动非阻塞式 I/O 的模型,使其轻量又高效并且Node.js 的包管理器 npm,是全球最大的开源库生态系统。

3.进程与线程 #

进程是操作系统分配资源和调度任务的基本单位,线程是建立在进程上的一次程序运行单位,一个进程上可以有多个线程。

3.1 谈谈浏览器 #

浏览器模型

由此可见浏览器是多进程的,并且从我们的角度来看我们更加关心浏览器渲染引擎

3.2 渲染引擎 #

渲染引擎内部是多线程的,内部包含两个最为重要的线程ui线程和js线程。这里要特别注意ui线程和js线程是互斥的,因为JS运行结果会影响到ui线程的结果。ui更新会被保存在队列中等到js线程空闲时立即被执行。

3.3 js单线程 #

javascript在最初设计时设计成了单线程,为什么不是多线程呢?如果多个线程同时操作DOM那岂不会很混乱?这里所谓的单线程指的是主线程是单线程的,所以在Node中主线程依旧是单线程的。

3.4 其他线程 #

单线程特点是节约了内存,并且不需要在切换执行上下文。而且单线程不需要管锁的问题,这里简单说下锁的概念。例如下课了大家都要去上厕所,厕所就一个,相当于所有人都要访问同一个资源。那么先进去的就要上锁。而对于node来说。下课了就一个人去厕所,所以免除了锁的问题!

4.浏览器中的Event Loop #

eventLoop

整个的这种运行机制又称为Event Loop(事件循环)

5.Node系统 #

我们先来张图看看node是如何工作的

node system

6.同步与异步 #

同步和异步关注的是消息通知机制

7.阻塞与非阻塞 #

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

8.组合 #

同步异步取决于被调用者,阻塞非阻塞取决于调用者

9.宏任务和微任务 #

任务可分为宏任务和微任务

10.什么场合下应该考虑使用Node框架 #

当应用程序需要处理大量并发的输入输出,而在向客户端响应之前,应用程序并不需要进行非常复杂的处理。