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

2. Node是什么? #

3. Node特点 #

3.1 为什么JavaScript是单线程? #

3.2 浏览器模型 #

浏览器

3.3 除JS线程和UI线程之外的其它线程 #

3.4 任务队列 #

  1. 所有同步任务都在主线程上执行,形成一个执行栈
  2. 主线程之外,还存在一个任务队列。只要异步任务有了运行结果,就在任务队列之中放置一个事件。
  3. 一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
  4. 主线程不断重复上面的第三步。

3.5. Event Loop #

主线程从任务队列中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)

eventloop

3.6. Node.js的Event Loop #

eventloop

  1. V8引擎解析JavaScript脚本。
  2. 解析后的代码,调用Node API。
  3. libuv库负责Node API的执行。它将不同的任务分配给不同的线程,形成一个Event Loop(事件循环),以异步的方式将任务的执行结果返回给V8引擎。
  4. V8引擎再将结果返回给用户。

3.7. 同步与异步 #

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

3.8. 阻塞与非阻塞 #

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

3.9. 组合 #

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

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

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