这是我在提到实时处理语言时一再看到的术语。在这种特殊情况下,我正在阅读node.js主页,它有这样的引用:
“在其他系统中,始终存在阻塞调用以启动事件循环。”
什么是拦截电话?
答案 0 :(得分:14)
阻止脚本执行直到结束的函数。
例如,如果我的语言中有一个用于写入文件的函数,就像这样:
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
语句将立即被调用,无论文件是否已被写入。因此,如果我们要编写足够大的blob,输出可能如下所示:
Do other stuff
Wrote to file!
这使得应用程序非常快速,因为您不是在等待客户端消息,文件写入或其他。您可以继续以并行方式处理数据。这被Node.js的许多优势所考虑。
答案 1 :(得分:2)
var block = function _block() {
while(true) {
readInputs();
compute();
drawToScreen();
}
}
阻塞功能基本上是永久计算的。这就是阻止它的意思。
其他阻塞函数会等待IO发生
非阻塞IO系统意味着一个函数启动一个IO操作,然后进入空闲状态,然后在IO动作发生时处理它。
这基本上是线程空闲和休眠之间的区别。
答案 2 :(得分:0)
阻塞调用是一种不允许处理继续直到它返回调用线程的调用 - 这也称为同步调用。另一方面,异步意味着线程(和代码)可以同时执行(并发)。