JavaScript是单线程运行的,但可以创建回调函数平行线程与主线程并行运行实现异步编程。12345setTimeout(function () { console.log('Async');}, 500);console.log('Hello');
输出结果可以看到后续打印代码先于回调代码执行。
但即使平行线程执行完毕了通知主线程进行回调时,回调函数也需等到主线程空闲时才可执行。
同样的, Node.js依赖回调函数实现异步I/O,所有API都支持回调函数,通过非阻塞调用异步来实现处理高并发请求
新建文件fsAsyncTest.txt
,写入Hello Async
并保存。
创建实例fsReadTest.js
代码如下1234567var fs = require('fs'); fs.readFile('fsAsyncTest.txt',function(err,data){ if (err) return console.error(err); console.log(data.toString());});console.log('Finish Read');
输出结果同样可以看到后续打印先于回调代码执行。
异步通过回调函数实现了在读取文件时同时执行后续代码,无需等待文件读取完再执行后续代码,非阻塞调用提高了性能。
参考资料:阿里巴巴Node.js文档