Node.js中什么是非阻塞I/O?通过示例来理解!

node.js中什么是非阻塞i/o?本篇文章通过例子带大家了解一下node.js中的是非阻塞i/o,希望对大家有所帮助!

Node.js中什么是非阻塞I/O?通过示例来理解!

写在最前老早就想学Node.js了,觉得前端一定要是懂服务端知识,并且可以自己独立完成一个小型全栈项目的,但是碍于时间因素,上学期学了点基础之后,就再也没空学,正好今天科二过了,Node.js我又来卷你了!!!【推荐学习:《nodejs 教程》】

I/O就是input/output,一个系统的输入输出阻塞I/O和非阻塞I/O的区别就在于系统的接收输入,在到输出期间,能不能接收其他输入

举个栗子

去食堂吃饭:我们都要排队打饭

我们的流程是:排队——>等前面的人打饭——–>轮到我们自己打饭——->开始吃饭

出去吃饭:餐厅点菜

现在我们的流程是:坐下——->点菜——->等待——–>开始吃饭

尝试开始在markdown中使用一些奇奇怪怪的东西

排队打饭 vs 餐厅点菜

对于点菜人员的我们来说:

排队打饭是阻塞I/O餐厅点菜是非阻塞I/O

继续来看最上面那句话:

系统的接收输入,在到输出期间,能不能接收其他输入

在栗子中,系统=食堂打饭的阿姨或者是餐厅服务生,输入=点菜,输出=端菜(上菜)

食堂阿姨只能一份一份的打饭———> 阻塞I/O

服务生点完菜之后还可以服务其他客人——->非阻塞I/O

其实,这个问题小学老师就教过我们

小芳帮妈妈做家务,需要做:用洗衣机洗衣服(20分钟)、扫地(10分钟)、整理书桌(10分钟)、晾衣服(5分钟)。你能不能设计一个巧妙合理的新顺序,使小芳最少花(      )分钟可以完成这些事?

A.20

B.25

C.30

D.35

没想到吧?(其实我也没想到~)

在这个过程中,我们用洗衣机洗衣服=输入,晾衣服=输出,在洗衣机洗衣服的过程中,我们是可以去做其他事情的,所以这个属于非阻塞I/O哟。

思考

理解非阻塞I/O,首先要确定的是什么?

我们要确定有一个输入/输出(input/output)的系统。思考在I/O过程中,能不能进行其他I/O。能——>非阻塞不能——->阻塞

写个栗子

先新建一个index.js,再打开我们前端人的vs-code,打开终端,执行npm install glob安装一个glob包,来帮我们更加方便去观察I/O是否阻塞。

先来看阻塞I/O

代码先贴上:index.js

const glob = require('glob');var result = null;console.time('glob')result = glob.sync(__dirname + '/**/*')console.timeEnd('glob')console.log(result)

登录后复制

首先,先用require引入我们的glob包,接下来,用glob.sync去做一个打印目录的一个操作,将结果打印的同时,利用time/timeEnd,去记录时间,看node执行这个操作共花费多少时间。

在终端输入node index.js直接运行这个文件

1.png

看第一行,在我的电脑上执行共花费20.93毫秒啊,这个数量在一个服务端来说,已经不小了。

再看非阻塞I/O

直接上代码:

const glob = require('glob');var result = null;console.time('glob')glob(__dirname + '/**/*',function(err,res){    result = res;    // console.log(result)    console.log('got result');})console.timeEnd('glob')console.log('今天你卷了没?')

登录后复制

这次采用一个回调函数的方式来进行操作,因为result的打印出来实在太多行了,我们将其替换为打印出’got result’,并在计时完成后进行一个打印语句的操作,让我们来看看结果:

2.png

首先还是我们的时间:3.258ms,跟之前的20.93比起来,简直少了不要太多好嘛,完后是我们输出的语句,最后才打印了我们想要的操作结果,也就是说,它在输入输出之间进行了别的操作,对结果无影响,且用时少了好多!

结论

我的理解:非阻塞I/O让我们减少了许多等待的时间,并且在等待时间内,我们还可以进行一些其他的操作(欢迎大佬给予指点!!!!)

凡事没有绝对,不是说非阻塞I/O就一定是好的,还是拿餐厅举例子,比如服务员中间发生意外,所有的客人都要等这一个服务员,这样就会影响餐厅整体质量(可以理解为服务器奔溃);阻塞I/O由于有多个服务员,一对一的服务,即使有一个发生意外,也不会影响整体质量,而雇多个服务员也要相应的付出成本。

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

以上就是Node.js中什么是非阻塞I/O?通过示例来理解!的详细内容,更多请关注【创想鸟】其它相关文章!

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

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

(0)
上一篇 2025年3月7日 04:28:32
下一篇 2025年2月26日 17:35:10

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

相关推荐

  • 浅析Node.js包管理工具 npm 和 yarn 的用法

    本篇文章带大家了解一下node.js包管理工具 npm 和 yarn 的使用方法,带大家快速入门npm 和 yarn。 本文学习 node.js 的包管理工具 npm& yarn 的使用。【推荐学习:《nodejs 教程》】 使用 …

    2025年3月7日
    200
  • 浅谈Node.js中的流,聊聊读取文件的三种方式

    本篇文章带大家简单了解一下node.js中的流,介绍一下读取文件的三种方式:异步读取文件、同步读取文件和流的方式读取文件。 学习 Node.js 的一些基础 1.fs 模块 内置模块 npm i    第三方模块 登录后复制 自己写的 自定…

    2025年3月7日
    200
  • 浅谈Node.js中的path模块和常用方法

    本篇文章带大家了解一下node.js中的 path 模块,介绍一下 path 模块的用法,以及常用的 path 方法。 Node.js path 模块是一个内置模块,可帮助您以独立于操作系统的方式使用文件系统路径。如果要构建支持 OSX、L…

    2025年3月7日
    200
  • Node.js中如何利用node-cron来调度任务?

    没有一个开发人员愿意把所有时间都花在繁琐的任务上,比如系统维护和管理、日常数据库备份以及定期下载文件和电子邮件。你更愿意专注于富有成效的工作,而不是跟踪这些烦人的琐事何时需要完成。【推荐学习:《nodejs 教程》】 这时就需要使用到任务调…

    2025年3月7日
    200
  • 深入了解Node.js中的4种 stream

    本篇文章带大家了解一下node.js中的4种 stream,看看怎么解决爆缓冲区的“背压”问题,有需要的朋友可以去学习了解一下~ 把一个东西从 A 搬到 B 该怎么搬呢? 抬起来,移动到目的地,放下不就行了么。 那如果这个东西有一吨重呢? …

    2025年3月7日 编程技术
    200
  • 聊聊Node.js Buffer中的encoding(编码)

    本篇文章带大家了解一下node.js buffer中的encoding,希望对大家有所帮助! 计算机最小的单位是一个位,也就是 0 和 1,在硬件上通过高低电平来对应。但是只有一位表示的信息太少了,所以又规定了 8 个位为一个字节,之后数字…

    2025年3月7日
    200
  • nodejs是做什么的

    nodejs是能够在服务器端运行JavaScript的开放源代码、跨平台运行环境;Node.js采用Google开发的V8运行代码,使用事件驱动、非阻塞和异步输入输出模型等技术来提高性能,可优化应用程序的传输量和规模。 本文操作环境:win…

    2025年3月7日
    200
  • 浅析Node.js api的 POSIX 标准

    posix 是什么?有哪些内容?下面本篇文章带大家了解一下node.js api的 posix 标准、node.js api的特点,希望对大家有所帮助! 【推荐学习:《nodejs 教程》】 如果你用过 Node.js 的 api,会不会觉…

    2025年3月7日
    200
  • 聊聊利用Node.js 的多线程能力怎么做异步计算

    怎么做异步计算?下面本篇文章给大家介绍一下利用浏览器和 node.js 的多线程能力做异步计算的方法,希望对大家有所帮助! 都说 Node.js 可以实现高性能的服务器,那什么是高性能呢? 所有的软件代码最终都是通过 CPU 来跑的,能不能…

    2025年3月7日
    200
  • 怎么利用Node.js查看操作系统及其版本号

    怎么利用node.js查看操作系统及其版本号?下面本篇文章给大家介绍一下node.js中判断操作系统、获取windows和mac系统的node.js版本号的方法。 获取操作系统 在 Node.js 中判断操作系统是非常简单的,用 proce…

    2025年3月7日
    200

发表回复

登录后才能评论