[摘要]本篇文章给大家带来的内容是关于Node.js中阻塞与非阻塞的讲解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。阻塞与非阻塞概述此概述介绍了Node.js中阻塞与非阻塞调用之间的区别...
本篇文章给大家带来的内容是关于Node.js中阻塞与非阻塞的讲解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
阻塞与非阻塞概述
此概述介绍了Node.js中阻塞与非阻塞调用之间的区别,此概述将引用事件循环和libuv,但不需要事先了解这些主题,假设读者对JavaScript语言和Node.js回调模式有基本的了解。
“I/O”主要指与libuv支持的系统的磁盘和网络的交互。
阻塞
阻塞是指在Node.js进程中执行其他JavaScript必须等到非JavaScript操作完成,发生这种情况是因为在发生阻塞操作时,事件循环无法继续运行JavaScript。
在Node.js中,由于CPU密集而不是等待非JavaScript操作而表现出较差性能的JavaScript,例如I/O,通常不称为阻塞。Node.js标准库中使用libuv的同步方法是最常用的阻塞操作,原生模块也可能具有阻塞方法。
Node.js标准库中的所有I/O方法都提供非阻塞的异步版本,并接受回调函数,某些方法还具有对应的阻塞方法,其名称以Sync
结尾。
比较代码
阻塞方法同步执行,非阻塞方法异步执行。
以文件系统模块为例,这是一个同步读取文件的方法:
const fs = require('fs');
const data = fs.readFileSync('/file.md'); // blocks here until file is read