# 二.Node 介绍

  • node 的首要目的是提供一种简单的,用于创建高性能服务器的开发工具
  • web 服务器的瓶颈在于并发的用户量

# 1.Node 的特点

  • node.js 是一个基于 chrome v8 引擎 JavaScript 运行环境,让 JavaScript 的执行效率与低端的 c 语言有相近的执行效率
  • node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效
  • node.js 的包管理器是全球最大的开源生态系统

# 1.1. 为什么 JavaScript 是单线程

  • 这个是由 JavaScript 这门语言的用途决定的
  • webwork 没有改变 JavaScript 单线程的本质

# 1.6. Node.js 的 Event Loop

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

# 1.7. 同步与异步

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

  • 同步就是发出调用后,没有得到结果之前,有调用不返回,一旦调用返回,就得到返回值了。简而言之就是调用者主动等待这个调用结果。
  • 而异步则相反,调用者在发出调用后这个调用就直接返回了,所以没有返回结果。换句话说当一个异步调用发出后,调用者不会立即得到结果,而是调用发出后,被调用者通过状态、通知或回调函数处理这个调用。

# 1.8. 阻塞与非阻塞

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

  • 阻塞调用是指调用结果返回之前,当前线程被挂起。调用线程只有在得到结果之后才会返回。
  • 非阻塞调用指在不能立即得到结果之前,该调用不会阻塞当前线程。

# 1.9. 组合

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

  • 同步阻塞
  • 异步阻塞
  • 同步非阻塞
  • 异步非阻塞

# 2.Node 使用场景

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

  • 聊天服务器
  • 电子商务网站