扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章将为大家详细讲解有关到底什么是阻塞Blocking,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
10年积累的做网站、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有白云免费网站建设让你可以放心的选择与我们合作。Node.js的阻塞(Blocking)与非阻塞(Non-Blocking)。我会提到EventLoop与libuv,但是不了解它们也不会影响阅读。读者只需要有一定的JavaScript基础,理解Node.js的回调函数(callbackpattern)就可以了。提到了很多次I/O,它主要指的是使用libuv与系统的磁盘与网络进行交互。
什么是阻塞(Blocking)
阻塞指的是一部分Node.js代码需要等到一些非Node.js代码执行完成之后才能继续执行。这是因为当阻塞发生时,EventLoop无法继续执行。
对于Node.js来说,由于CPU密集的操作导致代码性能很差时,不能称为阻塞。当需要等待非Node.js代码执行时,才能称为阻塞。Node.js中依赖于libuv的同步方法(以Sync结尾)导致阻塞,是最常见的情况。当然,一些不依赖于libuv的原生Node.js方法有些也能导致阻塞。
Node.js中所有与I/O相关的方法都提供了异步版本,它们是非阻塞的,可以指定回调函数,例如fs.readFile。其中一些方法也有对应的阻塞版本,它们的函数名以Sync结尾,例如fs.readFileSync。
Blocking代码示例
阻塞的方法是同步执行的,而非阻塞的方法是异步执行。
以读文件为例,下面是同步执行的代码:
constfs=require('fs');
constdata=fs.readFileSync('/file.md');//文件读取完成之前,代码会阻塞,不会执行后面的代码
console.log("Hello,Fundebug!");//文件读取完成之后才会打印
对应的异步代码如下:
constfs=require('fs');
fs.readFile('/file.md',(err,data)=>{
if(err)throwerr;
});//代码不会因为读文件阻塞,会继续执行后面的代码
console.log("Hello,Fundebug!");//文件读完之前就会打印
第一个示例代码看起来要简单很多,但是它的缺点是会阻塞代码执行,后面的代码需要等到整个文件读取完成之后才能继续执行。
在同步代码中,如果读取文件出错了,则错误需要使用try...catch处理,否则进程会崩溃。对于异步代码,是否处理回调函数的错误则取决于开发者。
关于到底什么是阻塞Blocking就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流