Marinerer / store

转载 && 收藏 && 乱七八糟 :clap:
65 stars 10 forks source link

【Node.js】系列 #19

Open Marinerer opened 6 years ago

Marinerer commented 6 years ago

Nodejs入门系列

Marinerer commented 6 years ago

精品文章

Marinerer commented 6 years ago

.

Marinerer commented 6 years ago

.

Marinerer commented 6 years ago

,

Marinerer commented 6 years ago

文章推荐

子匠_Zijor - Node.js笔记

Node学习笔记及总结

  1. 内置模块
  1. 进阶使用
Marinerer commented 3 years ago

Node.js 的工作原理

Node.js 基于单线程事件循环。 此体系结构模型可高效地处理并发操作。 并发是指事件循环在完成其他工作之后执行 JavaScript 回叫函数的能力。

在此体系结构模型中:

此上下文中的线程是操作系统可以独立管理的单个编程指令序列。

在 Node.js 中,I/O 操作(例如,读取磁盘文件或对其写入,或者对远程服务器进行网络调用)被视为阻止操作。 阻止操作会阻止所有后续任务,直到该操作完成,然后才能继续下一个操作。 在非阻止模型中,事件循环可以同时运行多个 I/O 操作。

名称“事件循环”描述“忙碌-等待”机制的使用方式,该机制以同步方式等待消息到达,然后再处理消息。 下面显示了一个事件循环实现:

JavaScript复制

while (queue.wait()) {
  queue.process();
}

Node.js 体系结构

Node.js 使用事件驱动的体系结构,其中的事件循环处理编排,辅助角色池阻止任务。 事件循环使 Node.js 能够处理并发操作。 下图大致说明了事件循环的工作原理:

显示 Node.js 如何使用事件驱动的体系结构的关系图,其中的事件循环处理编排,辅助角色池阻止任务。

事件循环的主要阶段包括:

Node.js 使用辅助角色池处理阻止任务。 这包括阻止 I/O 操作以及占用大量 CPU 的任务。

总而言之,事件循环运行为事件注册的 JavaScript 回叫,还负责实现非阻止异步请求(如网络 I/O)。

性能

JavaScript 可以产生与低级语言(例如 C)相同的性能结果,因为 V8 引擎可以提高性能。 Node.js 还利用了 JavaScript 独特的事件驱动特性。 这样便可以快速且高效地编写服务器任务。

异步编程

为支持功能强大的基于事件的编程模型,Node.js 提供了一组内置的非阻止 I/O API 来处理文件系统和数据库操作等常见任务。 这些 API 由 libuv 库提供。 当你请求 Node.js 读取磁盘中的文件内容时,Node.js 不会阻止等待磁盘和文件描述符准备就绪。 当文件准备就绪时,非阻止 I/O 接口将通知 Node.js。 当触发鼠标或键盘事件,或者从远程终结点接收到 XMLHttpRequest (XHR) 响应时,该非阻止 I/O 的工作方式与浏览器通知代码时的方式相同。

显示 Node.js 用于处理常见任务的一组内置的非阻止 I/O API 的图表。