
上QQ阅读APP看书,第一时间看更新
2.5.2 阻塞和非阻塞
让我们先了解阻塞(Blocking)和非阻塞(Non-Blocking)的区别。阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
【示例2-5】看一个阻塞代码的示例。
首先创建一个文件input.txt,内容如下:
Hello Sync!
创建main1.js文件,代码如下:
var fs = require("fs"); var data = fs.readFileSync('input.txt'); console.log(data.toString()); console.log("Done!");
以上代码执行结果如下:
node main.js Hello Sync! Done!
【示例2-6】再看一个非阻塞代码示例。
创建一个文件test1.txt,内容如下:
Hello Async!
创建main2.js文件,代码如下:

以上代码执行结果如下:
node main.js Done! Hello Async!
通过以上两个示例我们了解了阻塞与非阻塞调用的不同。第一个示例在文件读取完后才执行完程序。第二个示例我们不需要等待文件读取完,就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。
因此,阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,就需要写在回调函数内。