异步I/O
学习node的同学都知道,Node的结构与Chrome十分相似。它们都是基于事件驱动的异步框架,Node通过事件驱动服务I/O;
来我们说下一异步I/O,对于前段来说,最直观场景体现就是ajax请求;
我们看一个例子
$.post('/url', {title: '深入浅出Node.js'}, function (data) { console.log('收到响应'); }); console.log('发出Ajax结束');
当post执行的时候,我们会先看到 "发出Ajax结束",而"收到响应"的时间是不被预期的,
异步调用对结果的捕捉符合"Don't call me,I will call you!"的原则,来我们看一下执行的过程;
在 node 中异步也很常见,已读取文件为例,我们看一段代码
var fs = require('fs');
fs.readFile('/path',function(err,file){ console.log('读取文件结束'); }); console.log('发起读取文件');
这里的 “发起读取文件” 是在 “读取文件” 之前执行的,是不是和ajax的非常类似呢!
在node 中 90%以上的操作是异步的进行的,异步执行在时间上明显低于同步
再看一段代码
fs.readFile('/path1',function(err,file){ console.log('读取文件结束'); }); fs.readFile('/path2',function(err,file){ console.log('读取文件结束'); });
这一段代码的执行的时间是什么???
如果的同步的话,执行时间将是两者之和