到底什么是阻塞Blocking-创新互联

这篇文章将为大家详细讲解有关到底什么是阻塞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就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


分享题目:到底什么是阻塞Blocking-创新互联
URL标题:http://myzitong.com/article/eddpp.html