什么是阻止功能?

时间:2011-09-13 19:12:32

标签: node.js real-time

这是我在提到实时处理语言时一再看到的术语。在这种特殊情况下,我正在阅读node.js主页,它有这样的引用:

“在其他系统中,始终存在阻塞调用以启动事件循环。”

什么是拦截电话?

3 个答案:

答案 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)

阻塞调用是一种不允许处理继续直到它返回调用线程的调用 - 这也称为同步调用。另一方面,异步意味着线程(和代码)可以同时执行(并发)。