什么是阻塞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另一方面意味着线程(和代码)可以同时执行(并发)。