Node的异步I/O
第一部分: 组装好请求对象、送入I/O线程池等待执行
第二部分:回调通知
观察者: 用于处理每个Tick过程中是否有事件需要处理。每个事件循环中有一个或多个观察者,判断事件是否需要处理的过程就是观察者询问是否有要处理的事件。
浏览器采用的观察者机制: 每个事件都对应的观察者,在Node中,事情主要来源于网络请求、文件I/O等,对应的事件也有对应的观察者。
JavaScript代码到系统内核之间的流程
var forEach = function (list, callback){
for (var i = 0; i < list.length; i++){
callback(list[i], i, list);
}
}
对于Node中的异步I/O调用而言,回调函数并不由开发者来调用的。
在发出回调到回到函数被执行的过程中,主要是通过请求对象来完成整一个过程的。
例子:
fs.open()方法来作为例子
fs.open = funciton(path, falgs, mode, callback){
//..
binding.open(pathModule._makeLong(path)),
stringToFlags(flags),
mode,
callback);
};
fs.open() 的作用是根据指定路径和参数去打开一个文件,从而得到一个文件描述符,这是后续所有I/O 操作的初始操作。由代码可以产出,JavaScript层面的代码通过调用C++核心模块进行下层的操作,如下图
(写得不知道该怎么总结了,截图吧)
执行回调