nodejs的核心之一就是非阻塞的异步IO,文件读写操作时代码如下:
var fs = require('fs'); fs.readFile('file.txt', 'utf-8', functino(err,data){ if (err) { console.error(err); } else { console.log(data); } }); console.log('end.');
现在的问题是:这种异步是怎么实现的呢?我们知道读文件过程:Open-》Read-》Close,读文件必须按这个顺序执行,与node.js异布执行的机制是不同的。一种可能的方式是全部使用回调函数,在Open的回调中执行Read,在Read的回调中执行Close,但这样的方法显然不利于代码维护,逻辑上也混乱。另一种方法是使用事件通知机制。
如果node.js是完全单线程的,不管怎么说,Read时如果文件比较大,必然操作时间比较长,node.js就必须分多次执行,这样的结果是效率的降低,而不是提高。所以,事实上,读文件这种操作node.js也是在另一个线程中完成的。