详解Nodejs中的阻塞和非阻塞

本篇文章带大家理解一下nodejs中的阻塞非阻塞。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

详解Nodejs中的阻塞和非阻塞

推荐学习:《nodejs》

对于阻塞和非阻塞这两个概念大家应该都有一些自己的理解:

再简单说一下,阻塞大部分是由于同步模式造成,非阻塞可以理解为异步模式处理一些耗时的操作

那么再Node.js中阻塞和非阻塞是怎么描述的呢?下面主要就这个问题去展开说明:

Node中什么是阻塞?

I/O操作可以理解为主要是指与系统磁盘的交互(数据读写)或者是网络请求等

阻塞就是其他JS代码的执行必须要等到前面的耗时的I/O操作或者一些网络请求等完成之后。因为Node存在事件循环来解决这个问题,那假如说js再执行的过程中,事件循环没有被开启,其实就会造成阻塞的情况发生。

其实在Node.js中正常情况下也是存在被阻塞的情况,原因是Node的异步处理针对于I/O操作比较友好【利用事件循环】,但是对于JavaScript可能存在的一些CPU密集型的操作性能就比较低。有的同学可能会说,为什么CPU密集型的操作Node.js不能够异步支持呢?因为可以理解这些CPU密集型操作,其实都是一些同步代码,比如大量的for循环,海量的数据计算等。

Node.js的标准库中也存在一些同步的方法,这些方法大部分都是基于libuv来实现阻塞的效果。Node的原生模块中也存在一些阻塞方法。不过同时Node也会提供对应的异步版本的API。

什么事libuv呢? 是一个支持多平台的针对于异步I/O操作的库。 详细可见官网:https://libuv.org/

Node中什么是非阻塞呢?

首先思考一下在不局限于Node的背景之下如何实现非阻塞(异步)呢?

简单说两个:

1)可以开多个线程去处理并发的操作

2)事件循环的模式,如果有异步操作放在事件队列中,异步操作结束之后,调用对应的回调函数处理异步返回结果

Node.js是单线程的,原因是:Node.js外层是由JavaScript实现的,JavaScript的解释执行是通过V8引擎来做的。

既然JS的执行是单线程的,那么我们不可能在JS解释执行期间再开放一个线程其解释执行吧,因此Node.js是采用第二种方式来实现非阻塞(异步操作)的。

注意不要混用Node中的阻塞和非阻塞API

英文原文地址:https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/

更多编程相关知识,请访问:nodejs!!

以上就是详解Nodejs中的阻塞和非阻塞的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2713103.html

(0)
上一篇 2025年3月7日 21:20:32
下一篇 2025年3月1日 23:40:02

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用Nodejs连接Mysql,实现基本的增删改查操作

    本篇文章给大家介绍一下如何使用nodejs连接mysql,实现基本的增删改查(crud)操作。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 【推荐学习:《nodejs》】 接下来示例代码的主要技术点包括 基础框架 Koa…

    2025年3月7日 编程技术
    200
  • 深入了解调试nodejs程序的方法

    对于开发者来说,在开发应用程序的过程中,往往为了开发方便和解决bug需要借助于编程语言的调试功能。一般来说我们需要借助于强大IDE的调试功能来完成这项工作。nodejs也不例外。 今天我们来详细介绍一下如何调试nodejs程序。 开启nod…

    2025年3月7日 编程技术
    200
  • 浅谈浏览器中本地运行Node.js的方法

    本篇文章给大家介绍一下在浏览器中本地运行node.js的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 【推荐学习:《nodejs 教程》】 一切要从收到一封邮件开始 大早上,我收到一封邮件,StackBlitz说正…

    2025年3月7日 编程技术
    200
  • 一起了解Nodejs和命令行程序

    本篇文章给大家介绍一下nodejs和命令行程序。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 造物无言却有情,每于寒尽觉春生。千红万紫安排著,只待新雷第一声。 —— 清.张维屏 《新雷》 源起 植根于Unix系统环境下的…

    2025年3月7日 编程技术
    200
  • Nodejs可以应用于那些场景?

    本篇文章给大家介绍一些nodejs的应用场景。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 nodejsApache 的多线程高并发模式 优点:支持多线程并发 缺点:阻塞 nodejs什么是线程 线程是可以独立运行的最小…

    2025年3月7日
    200
  • 详解使用Docker给nodejs程序打包的方法

    本篇文章带大家了解一下docker,介绍为什么要使用 docker?如何使用 docker?以及使用docker给nodejs程序打包的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 你听到过这样的对话吗? 这种对话…

    2025年3月7日 编程技术
    200
  • 浅谈Nodejs如何进行多线程处理

    本篇文章给大家介绍一下nodejs进行多线程处理的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 Threads à gogo 是nodejs 的原生模块,使用这个模块可以让nodejs 具备多线程处理功能。【推荐学…

    2025年3月7日
    200
  • 深入了解Nodejs中的mongoose工具

    本篇文章给大家详细介绍一下nodejs mongoose。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 Mongoose 是在nodejs环境下,对mongodb进行便捷操作的对象模型工具。本文介绍解(翻)密(译)Mon…

    2025年3月7日
    200
  • 使用Nodejs如何实现一个简单的石头剪刀布小游戏

    本篇文章给大家介绍一下使用node.js做一个简单的石头剪刀布小游戏的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 初步了解了 Node.js 的模块、异步、HTTP 服务等知识点之后,就来做一个简单的石头剪刀布的…

    2025年3月7日 编程技术
    200
  • node.js和javascript区别是什么

    node.js和javascript区别是:JavaScript是一门编程语言(脚本语言),而Node.js是一个平台,可以简单理解为它是JavaScrip的一种独立于浏览器的运行环境。 本教程操作环境:windows7系统、javascr…

    2025年3月7日
    200

发表回复

登录后才能评论