前些天略研究了一下node.js的异步原理,才对node 的处理异步机制有些了解,于是想着写篇博文,一是可以帮助正在学习的猿们,二是也可以巩固自己,如果本文有什么错误的地方,还请各位指出,我会加以改正。
windows 的IOCP
首先我得先简单的说一下windows下处理高并发的异步模型,它是一种通信模型,用来解决服务器高并发的一种技术,它就是IOCP(I/O Completion Port)IO完成端口。
node异步IO
在node的底层libuv库里实现了IOCP这个异步模型,当我们在windows下运行Node 的程序,对于异步的请求处理,内部会用线程池来实现,这个线程池会被windows 管理,而这种实现方式就是IOCP的实现方式。
说到异步IO我们得先看一下是事件循环,它是整个异步实现的核心,它不断的从观察者把事件取出,分离回调来执行。
整个绿色的区域就是一个事件循环,它的作用就在于:
①取出事件
②执行相关联的回调
如果我们要执行一次异步IO,那它的整个流程是怎样的呢,比如我要执行一次读取文件的操作,这里我用promise来实现。
const fs = require("fs");
let readFile = path => {