位置: 编程技术 - 正文

nodejs教程之异步I/O(nodejs异步编程及原理)

编辑:rootadmin

推荐整理分享nodejs教程之异步I/O(nodejs异步编程及原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs 异步任务队列,nodejs异步编程及原理,nodejs异步编程及原理,nodejs 异步io底层原理,nodejs异步处理执行顺序,nodejs 异步io底层原理,nodejs异步编程及原理,nodejs异步编程及原理,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

在我映像中,异步最早出现与ajax,当时我还在搞.net,然后.net居然出了一个异步的控件......

虽然我最后知道了他不是异步的......然后,前端异步用得特别多,如果不是异步的程序,你都不好意思说是自己写的NodeJs是机遇javascript做出来的,

异步编程模型这一特点也被带了过来,异步有很多优点,但是对设计而言却是一个噩梦,异步会打乱时序,所以加大了设计困难,

但是异步对性能提升、对用户体验有了革命性的提高,所以NodeJS的 异步特性相当明显,今天我们就来简单学习

异步I/O

其实在操作系统层面上,只有两种I/O方式,堵塞和非堵塞

在堵塞模型中,应用程序需要等待I/O完成才返回结果,他的特点是调用后腰等待系统完成所有操作才行,这个会造成CPU的等待,而非堵塞调用后会马上返回

我初学是看的是一本书,但是这里感觉没有描述清楚,而且异步模型来说其实很大只是感受层面的提高,举一个简单的例子

我现在有一个搜索页和列表页两个单页应用的view,我搜索时候就是需要通过各种渠道搜索,深圳需要调用第三方,第三方再从具体渠道获取数据

这个时候当然很慢,我如果直接由A切入B在B在搞一个loading框什么的加载数据自然没有问题,但是现在问题是我A切换到B需要动画效果

这个就要求切换时候Bview渲染已经结束,至少不会再运到过程中获取数据开始渲染,所以此时异步可能就不那么好使,就是是异步请求数据,也是要数据获取才能加载页面

这个仍然是堵塞加载,这个在业务上是没有办法的

nodejs教程之异步I/O(nodejs异步编程及原理)

任何技术皆非完美,堵塞造成CPU等待浪费,非堵塞打乱逻辑不说可能还需要轮询以确认是否完成加载(曾经我使用轮询检测一个dom是否生成)

NodeJs采用的是事件循环机制,在进程启动时,Node会创建一个死循环,每执行一次循环体的过程就是一次Tick,每个Tick的过程就是才看是否有事件需要处理

如果有就取出事件相关,执行之,然后进入下一逻辑,没有就退出循环

每个Tick过程中,每个事件循环中有一个或者多个观察者,判断是否有事件要处理的过程就是向这些观察者询问是否需要处理这个事件

以我们html的事件模型为例

对html来说,其实他的每个DOM都是一个观察者,页面的DOM观察着我们的Web Page的变化,我们对一个DOM提供一个addEventListener后,便会对其注册一个回调函数,我们注册的事件会被放到一个“容器”对象中,这时只是注册,这些函数在满足条件后会被触发(页面变化时),相关的事件会从容器中取出执行

我们现在点击了一次页面上一个点,然后我们会由容器中取出click事件集合,我们会找到相关的dom,然后触发这些dom的回调函数

事件可能来自用户的点击或者数据变化,在Node中事件主要来自于网络请求,文件I/O,这些事件都会有对应的观察者,如文件观察者,网络观察者

这也是一个典型生产/消费模型,异步I/O ,网络请求提供事件生产,事件传递到各个观察者,观察者注册事件,事件循环负责取出事件然后执行事件

PS:以click为例,各个DOM观察者先注册事件,页面进程不停的监视页面,用户click页面生产事件,然后由容器中取出注册的click事件并执行,

一般的函数逻辑由我们控制:

异步的情况下回调函数不由开发者控制了,每次js发起调用会产生一个过渡产品请求对象

fs.open根据路径和参数打开一个文件,从而得到相关数据,内部调用了c++相关接口,过程中会产生一个中间对象,我们的所有状态会在其中......

PS:看了这么久,我感觉不太好

结语

标签: nodejs异步编程及原理

本文链接地址:https://www.jiuchutong.com/biancheng/374244.html 转载请保留说明!

上一篇:nodejs教程之入门(node.js入门)

下一篇:nodejs教程之环境安装及运行(node.js设置环境变量)

  • 投资收益纳税调整明细表怎么填
  • 增值税纳税人是委托方还是受托方
  • 固定资产一次性折旧政策2023
  • 个人给单位做事怎么开发票
  • 房租租赁房产税由哪方缴纳
  • 垫付运费的运费税怎么做分录
  • 网上增值税申报表怎么填
  • 一般纳税人能否享受残保金优惠
  • 给员工代缴社保工资是否违反劳动法
  • 模具发票如何入账
  • 过次页的金额怎么来的
  • 劳务公司代发工资合法吗
  • 支付平台使用费怎么算
  • 内部收据可以做入账处理吗?
  • 营改增施工企业哪些能退
  • 年薪制有什么好处
  • 金税三期房产税源信息更改后
  • 城建税教育费附加税率怎么计算
  • 付现金可以开专用发票吗
  • 洗衣店每个月水电费多少钱
  • 政府补助企业的钱要交税吗
  • 应收账款负数可以调到哪个科目
  • 出口退税系统中的出口货物已补税未退税证明怎么填
  • 员工可以一起辞职吗
  • php汉字转拼音代码
  • win11安装程序提示非管理员账号
  • 增值税专用发票上注明的价款含税吗
  • 压缩模制
  • 被雪覆盖的山峰
  • 没有购入发票可以开出发票
  • 一般纳税人增值税优惠政策2023
  • 个体户转企业怎么做账
  • 建筑 营改增
  • php如何调用类
  • thinkphp5依赖注入
  • JavaScript之Ajax-axios表单提交
  • 企业研发费用加计扣除比例
  • 增值税预征税率是多少
  • 织梦前台数据不能存入中文
  • 远期汇票分为哪几种
  • 印花税的缴纳
  • 进口关税完税价格的计算公式
  • 财政部监制的收据没有税号可以入账吗
  • sql中循环语句怎么写
  • 电子承兑转出需要授权吗
  • 消费税是在哪个环节缴纳
  • 现金流量明细分类
  • 私车公用必须是公司员工的车吗?
  • 公司部门财务单独核算
  • 春节重要通知发放工资
  • 收银电脑怎么录商品
  • 办公室租金发票可以扺增值税吗
  • 其他债权投资计提损失准备会引起资产总额增加吗
  • 调整去年管理费用怎么做分录
  • 物业管理企业应设置代管基金和代收款项账户
  • sqlserver2012安装失败原因
  • mysql实用教程
  • 断电恢复
  • sqlserver分页查询sql
  • xp怎么解压文件
  • xp系统设置锁屏
  • solaris ssh offline
  • SWNETSUP.EXE - SWNETSUP是什么进程 有什么用
  • The file /boot/grub/stage1 not read cor 解决办法
  • 如何设置虚拟内存大小
  • sharedprem.exe - sharedprem是什么进程 有什么作用
  • 2021年win10累积更新
  • Win10打开或关闭系统图标里开怎么灰色的
  • win8.1系统升级
  • 分布式队列秒杀活动
  • perl -pi
  • 酷狗app去广告
  • Web Inspector:关于在 Sublime Text 中调试Js的介绍
  • jqueryattrprop区别
  • unity安装进度条不动
  • 针对后台列表table拖拽比较实用的jquery拖动排序
  • 一起学下载软件
  • flask pycharm
  • 开票系统怎么升级?
  • 云南省昆明市税收优惠政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设