1深入了解Node.js: Event Loop与学习路径指南(下)

103 阅读3分钟

一. Event Loop是什么

  • 什么是Event
    • 计时器到期了
    • 文件可以读取了、读取出错了
    • socket有内容了、关闭了,比如用户请求了服务器需要有一个操作系统告诉js的事件
    • 一般分内部和外部事件,计时器就属于内部事件,文件读取属于外部事件,文件是在u盘等外面的设备
  • 什么是Loop
    • loop就是循环,比如while(true)循环
    • 由于事件是分优先级的,所以处理起来也是分先后的
    • 所以Node.js需要按顺序轮询每种事件
    • 这种轮询往往都是循环的,1->2->3->1->2->3
  • Event Loop
    • 操作系统可以触发事件,JS可以处理事件
    • Event Loop就是对事件处理顺序的管理

二. 不同事件先后顺序例子

  • 三种不同的事件
setTimeOut(f1,100)
fs.readFile('/1.txt',f2)
server.on('close',f3)
  • 如果同时触发,Node会怎么办
    • 肯定会有某种顺序(优先级),比如先执行文件,再执行服务器关闭,再执行定时器。
    • 这种顺序应该是人为规定的

三. Event Loop 详解

2-1.png

  • 重点阶段
    • timers检查计时器
    • poll轮询,检查系统事件
    • check检查setImmediate回调
    • 其他阶段用得较少
  • 注意
    • 大部分时间,Node.js都停在poll轮询阶段
    • 大部分事件都在poll阶段被处理,如文件、网络请求等,文件和网络请求是不等人的,相比而言计时器可以稍等一会

2-1.png

  • 面试题
setTimeout(f1, 0)
setImmediate(f2) 
// 哪个先执行
// 大部分场景应该是setImmediate,因为loop是停留在poll阶段,下一步是check阶段,check阶段就是检查setImmediate回调
// 例外情况,就是初始化第一次的时候是先进timers此时setTimeout先执行
  • 文章里面的例子可以用类似参考以下代码直接在浏览器里运行
function someAsyncOperation(callback) {
  const startCallback = Date.now();
  // 模拟读取这个文件一共花费 95 毫秒,
  while (Date.now() - startCallback < 95) {
    // 什么也不做
  }
  callback()
}

const timeoutScheduled = Date.now();

setTimeout(() => {
  const delay = Date.now() - timeoutScheduled;

  console.log(`${delay}毫秒后执行了 setTimeout 的回调`);
}, 100);


// 执行一个耗时 95 毫秒的异步操作
someAsyncOperation(() => {
  const startCallback = Date.now();
  // 执行一个耗时 2000 毫秒的同步操作
  while (Date.now() - startCallback < 2000) {
  }
});

// 最后打印:2095毫秒后执行了 setTimeout 的回调

四. node.js工作流程

2-2.png

  • 如图,其中最主要的就是v8和libuv,以及中间的一些bindings,我们实际写的代码只有一小步部分

五. Node.js API

  • API官方地址
    • 英文文档nodejs.org/api
    • 中文文档nodejs.cn/api
  • 民间版本
    • devdocs.io
    • 进入之后开启Node.js10LTS
    • 搜索功能非常方便
    • 可开启暗黑主题
    • 可离线观看

六. Node.js中大概有哪些API

  • 重点关注黄色字体的部分

2-3.png

七. 学习路线

  • 基础-Web-框架
    • 先学基础,以任务为导向学习
    • 逐个学习文件、HTTP、Stream等模块
    • 再学Web,学习数据库、AJAX相关知识
    • 最后学框架,以项目为导向学习
    • 以Express为切入点,制作完整的网站
  • 三个约定
    • 希望大家记笔记,写博客
    • CRM学习法贯穿整个学习过程
    • 学习调试工具和思路

八. 如何记笔记

  • 东京大学笔记法,详细记录关键信息、例子、思考,把自己要做的事情写下来。

2-4.png