异步处理的强者——Nodejs

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);

});

}

伪代码表达的是程序的流程机制,还有一种坐标表示方法来比较两者的区别。


同步线程处理


node异步

这边需要说明的是,这个请求假设了有三个阶段:执行函数、一次I/O操作,执行函数b。但是实际中,请求有很多其他的形式。在异步的图中,可以明显看出,node的主线程是第一位的,当主线程完成之后,可能还需要等待一定的时间来输出函数a。

你可能感兴趣的:(异步处理的强者——Nodejs)