位置: 编程技术 - 正文

小结Node.js中非阻塞IO和事件循环(node.js基本语法)

编辑:rootadmin

推荐整理分享小结Node.js中非阻塞IO和事件循环(node.js基本语法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs define,node.js c,nodejs ffi,nodejs ffi,node.js基本语法,node.js基本语法,node.js语法,node js fs,内容如对您有帮助,希望把文章链接给更多的朋友!

  学习和使用Node.js已经有两个月,使用express结合mongoose写了一个web应用和一套RESTful web api,回过头来看Node.js官网首页对Node.js的介绍:Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.那么其中的non-blocking I/O model 意味着什么呢?

非阻塞的IO模型

  首先,IO操作无疑是耗时的,当服务器端接收到大量请求时,为每一个请求创建进程或线程的同时,也增加了额外的内存开销,也可能浪费更多的时间资源。

  由于Node.js是事件驱动的,于是它使用了事件循环来解决IO操作带来的瓶颈问题。在Node.js中,一个IO操作通常会带有一个回调函数,当IO操作完成并返回时,就会调用这个回调函数,而主线程则继续执行接下来的代码。简单的用一个例子来说明这个问题:

  这段代码的意思是向' event loop

  接下来,来讨论下事件循环的机制。首先说说调用?C,比如有如下一段代码:

小结Node.js中非阻塞IO和事件循环(node.js基本语法)

  当代码执行后,函数A首先被推入调用?C中成为栈顶元素并开始执行A,在执行过程中函数B又被推入调用?C成为栈顶元素,在B执行完成后,B被弹出调用?C,A再次成为栈顶元素,在A执行完成后A被弹出调用?C,调用?C呈空闲状态。

  在Javascript运行时中存在一个消息队列,而消息和一个回调函数相关联,当一个事件被触发时,如果这个事件有相应的回调函数,则该消息就会被加入到消息队列中去。

  回过头来说事件循环到底循环的是什么,在代码开始执行后,函数被不断推入调用?C中,就拿上面的例子来讲,request被推入调用?C中,这个函数将进行一个http请求(这个http请求将交由Node.js的底层模块来实现)同时请求完成的事件和一个回调函数关联起来,request被弹出调用?C,console.log被推入调用?C开始执行。当请求完成时,完成事件被触发,一条消息被添加进消息队列中,消息队列首先会检查调用?C是否为空闲状态,如果调用?C并不空闲,则会一直等待到调用?C空闲状态后,将消息队列的头部弹出,此时与该消息相关联的回调函数被执行。

小结

  以上就无阻塞模型和事件循环在概念上进行了总结。而这个事件循环的机制并不仅仅是Node.js所独有的,并且Node.js的代码是单线程执行的,在面对大量并发请求的时候,又有着什么优势呢?

  上面这张图展示了Node.js的架构图,Node.js的底层有一个模块负责维护线程池,当一个IO请求发出的时候,Node.js的底层模块将新建一个线程来处理请求,完成后再将结果交还给上层。那么,当有多个请求的时候,Node.js的底层模块将利用尽可能少的线程来完成最多的任务,如果存在空闲的线程,它将继续被利用来做其他的事情,这对于前面说的针对每个请求开一个新的进程或线程而言,无疑“聪明”许多,也更加高效了。

  这篇文章是对学习Node.js的一个总结,其中若有问题和不足,欢迎批评指正。

用C/C++来实现 Node.js 的模块(一) N久之前的一个坑——用Node.js来重构NBUT的OnlineJudge,包括评测端也得重构一遍。(至于什么时候完成大家就不要关心了,(/?Д′)/~??总之我们现在要做

用C/C++来实现 Node.js 的模块(二) 温故而知新,可以为湿矣首先请大家记住这个V8的在线手册——

Nodejs异步回调的优雅处理方法 前言Nodejs最大的亮点就在于事件驱动,非阻塞I/O模型,这使得Nodejs具有很强的并发处理能力,非常适合编写网络应用。在Nodejs中大部分的I/O操作几乎都

标签: node.js基本语法

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

上一篇:Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)(node:js)

下一篇:用C/C++来实现 Node.js 的模块(一)(c++ not1)

  • 采购材料的进项税
  • 印花税滞纳金应计入什么
  • 企业计提增值税 附加税
  • 对方公司已注销如何付款
  • 营业外收入需要结转到本年利润吗
  • 一般纳税人金税盘抵税会计分录
  • 个人转让房产两年内全额计税是什么意思
  • 公司承担社保能放到生产成本里吗
  • 会计分录借贷符号
  • 购销合同印花税最新政策2023
  • 普通商户怎么开小票
  • 2023年企业退休职工取暖费
  • 银行收取代发工资合法吗
  • 机构账户炒股是卖出后缴税么
  • 收到招聘通知
  • 如何填写增值税及附加税费申报表
  • 社保和个税怎么个对应法
  • 企业创业初期能干什么
  • 购进原材料不用交税吗
  • 代收代付业务是什么意思
  • 开个人发票需要身份证号码吗
  • 被强制升为一般纳税人的条件
  • 计提坏账准备的科目
  • 投资电影分红款如何开具发票?
  • 电脑折旧率计算公式
  • windowsserver2019安装教程
  • reg.dll是什么
  • vue定位城市
  • 建筑 营改增
  • yii2超好用的日期组件和时间组件
  • 【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)
  • javascriptjs
  • 哪些税金不需要通过应交税费科目核算
  • 公司租房电费怎么算
  • 商誉 减值
  • 企业会计准则规定了
  • 国内源码平台
  • 应收票据及应收账款周转率计算公式
  • 网上如何增加办税人员
  • 职工福利费的开支范围的规定扣除
  • 小规模年度企业所得税纳税申报表
  • 城市基础设施配套费征收管理规定
  • 长期应付账款是什么
  • 税费滞纳金计入营业外支出吗
  • 委托代销商品是什么科目
  • 押金退还需要多久
  • 传媒公司的骗局把戏
  • 滞纳金冲留底税额怎么算
  • 突然收到财付通转出的钱
  • 金税服务费发票哪里打印
  • 增值税普通发票需要交税吗
  • 利润表中财务费用中的利息费用和利息收入
  • sqlserver存储过程在哪里
  • 微软6月24号
  • 如何解决脑供血不足
  • win8无法完成更新正在撤销更改怎么办
  • mac ios应用
  • 如何修改apache
  • win10语音识别怎么打开
  • 360修复漏洞补丁一直下载
  • win7升级win10系统版本软件还有吗
  • 防火墙ddos攻击防范
  • linux怎么操作命令
  • jqueryfind
  • js编程代码
  • jquery 选择
  • 完美解决怠速抖动加油就平稳
  • 耳机插头怎么拔
  • 编写shell脚本,批量建立用户
  • unity中assets文件夹的作用
  • js引用传递
  • python电话本
  • android xmlns
  • android 4.2
  • 如何查询企业税务评级
  • 河北地税代收工作怎么样
  • 夫妻双方房子契税怎么算
  • 海关税怎么交 怎么算
  • 国家税务总局南京市秦淮区税务局纳税服务中心
  • 大连市网上税务申报平台
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设