Node是一个站在巨人肩膀的新技术,它是基于V8引擎的一个可以称之为“心脏”的配件,所谓打怪手,一定也需要良好的装备,它还拥有高阶函数和闭包的异步编码范式。读一句话,有时候需要有些咬文嚼字的谨慎,这边讲到了高阶函数和闭包还有异步。下面,就先将这些概念梳理一下,便于后面进行更复杂的程序思想理解。所谓的同步和异步,直接通过实战来演示。
先上一盘同步的伪代码。
function request (){
//开始执行函数a
$rel_a = stage_a();
//读文件,将文件内容,返回到$data
$data = readfile();
//将前两步的结果作为参数,调用函数b
stage_b($rel_a,&data);
}
简单几行代码,可以看出,执行函数时,每一个请求都是用一线程(或进程)来处理。一次请求处理完成之后,线程被回收。这边有2个线程,也即 stage_a和stage_b。
接着,弄一波异步机制的伪代码。
var request = function(){
//开始执行函数 a
var rel_a = stage_a();
//发起异步读取,主线程立即返回,处理后后面的任务
readfileAsync(function(data){
//在随后的循环中,执行回调函数
stage_b(rel-a,data);
});
}
伪代码表达的是程序的流程机制,还有一种坐标表示方法来比较两者的区别。
这边需要说明的是,这个请求假设了有三个阶段:执行函数、一次I/O操作,执行函数b。但是实际中,请求有很多其他的形式。在异步的图中,可以明显看出,node的主线程是第一位的,当主线程完成之后,可能还需要等待一定的时间来输出函数a。