什么是节点js中的阻塞操作?

时间:2014-07-29 02:51:21

标签: node.js blocking nonblocking

我一直在阅读node.js中关于阻塞和非阻塞操作的相关内容,到目前为止,这是我已经整理的内容:

database operations --> non-blocking;
open/close files -----> non-blocking;
network operations ---> non-blocking;

我最大的疑问是"正常"操作,即那些不需要访问RAM以外的操作的操作。事实上,让我们说我经历了一长串长期的这些"正常"我的节点服务器中的操作。是否有一点它们的执行可能实际上会降低服务器的性能? (显然,我只是一个初学者,所以不要太苛刻)。

2 个答案:

答案 0 :(得分:2)

没有魔法"无阻塞"在javascript或node.js中调用,所以"阻塞"的概念或"同步"函数调用很大程度上取决于函数的期望效果。 javascript中的所有函数调用(ES6生成器除外)都是同步的,因此我定义了"非阻塞"请致电如下:

  

功能通常被称为"非阻塞"如果此时函数返回控制到父期望的副作用可能尚未准备好。相反,在运行时中更改某些状态(放入队列中的命令,添加到监视列表中的文件描述符等),并且运行时可以将控制恢复到由"非阻塞"引用的另一个函数。作为参数起作用(通常称为"回调"函数)

答案 1 :(得分:0)

Node.js是一个单线程运行时;它在该线程上同步执行所有CPU绑定工作。

只要该线程正在运行同步代码(内存访问和计算),就不能运行其他代码。

所有非阻塞操作(网络和磁盘访问)都是异步运行的,并在结果返回时回调到线程中。