什么是阻塞函数或阻塞调用?
这个术语在涉及Node.js或实时处理编程语言时经常出现。
什么是阻塞函数或阻塞调用?
这个术语在涉及Node.js或实时处理编程语言时经常出现。
一个将脚本执行暂停直到其结束的函数。
例如,如果我有一个在我的语言中用于写入文件的函数,像这样:
fwrite(file, "Contents");
print("Wrote to file!");
print
语句只有在文件被写入磁盘后才会执行。整个程序在这条指令上停止。对于足够小的写操作,这不会引起注意,但是想象一下,如果我要写入一个非常大的blob到文件中,需要花费很多秒钟:
fwrite(file, blob);
print("Wrote to file!");
print
语句将会在写入几秒钟后才被执行,整个程序将会在这段时间内停止运行。在Node.js中,这些操作是通过异步方式完成的,使用事件和回调函数。我们的示例将变为:
fwrite(file, blob, function() {
print("Wrote to file!");
});
print("Do other stuff");
第三个参数是一个函数,一旦文件被写入后就会被调用。无论文件是否已经被写入,紧跟在写入函数后面的print
语句都会立即被调用。因此,如果我们要写入足够大的数据块,则输出可能如下所示:
Do other stuff
Wrote to file!
这使得应用程序非常快速,因为您不必等待客户端消息、文件写入或其他操作。您可以以并行方式继续处理数据。这被许多人认为是 Node.js 的优点之一。
var block = function _block() {
while(true) {
readInputs();
compute();
drawToScreen();
}
}
阻塞函数基本上会一直运算下去,这就是所谓的阻塞。
其他阻塞函数会等待IO操作发生。
非阻塞IO系统意味着一个函数开始一个IO操作,然后进入空闲状态,当IO操作完成时处理IO操作结果。
这基本上是线程空闲和休眠之间的区别。