什么是阻塞function?
当谈到实时处理语言时,这个术语我一次又一次地看到。 在这个特殊情况下,我正在阅读node.js主页,它有这样的引用:
“在其他系统中总是有一个阻塞的调用来启动事件循环。”
什么是阻塞呼叫?
停止脚本执行的function,直到它结束。
例如,如果我的语言中有一个用于写入文件的function,如下所示:
fwrite(file, "Contents"); print("Wrote to file!");
print
语句只能在文件写入磁盘后执行。 整个程序停止在这个指令。 对于写足够小的文件来说,这是不明显的,但想象一下,我有一个巨大的blob写入文件,花了很多秒:
fwrite(file, blob); print("Wrote to file!");
print
语句只能在几秒钟的写入后才能执行,并且整个程序将在那个时间停止。 在Node.js中,这个东西是asynchronous完成的,使用事件和callback 。 我们的例子会变成:
fwrite(file, blob, function() { print("Wrote to file!"); }); print("Do other stuff");
第三个参数是一旦文件被写入就被调用的函数。 位于写入函数之后的print
语句将在之后被立即调用,无论文件是否已经写入。 所以如果我们要写足够大的blob,输出可能看起来像这样:
Do other stuff Wrote to file!
这使得应用程序非常快速,因为您不是在等待客户端消息,文件写入或其他。 您可以继续以并行方式处理数据。 这被Node.js的许多优势所考虑。
var block = function _block() { while(true) { readInputs(); compute(); drawToScreen(); } }
阻塞函数基本上是永远计算的。 这就是阻止的意思。
其他阻塞函数将等待IO发生
一个非阻塞的IO系统意味着一个函数启动一个IO动作,然后变为空闲,然后在IO动作发生时处理结果。
这基本上是一个线程空闲和睡眠之间的区别。
阻塞调用是一个不允许处理继续,直到返回到调用线程 – 这也称为同步调用。 asynchronous另一方面意味着线程(和代码)可以同时执行(并发)。