位置: 编程技术 - 正文

小结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)

  • 个体户要交什么税,怎样收
  • 外国驻华使领馆自用车辆
  • 为职工垫付的水电费应计入
  • 企业发生的职工培训费应计入产品的制造成本
  • 公司员工社保怎么办理的
  • 遗失的支票怎样避免经济损失
  • 收款凭证填写模板下载
  • 物业用房的装修费可以在土地增值税清算时扣除吗
  • 公司收到银行承兑汇票怎么做分录
  • 电影剧本稿费代扣代缴个人所得税如何处理?
  • 融资租赁租金会计科目
  • 付出的房屋押金可以退吗
  • 企业工会经费不足,可以向企业拨款吗
  • 地税税款未扣怎么处理
  • 外贸公司发票过期怎么办
  • 专票遗失需要怎么处理?
  • 增值税普通发票需要交税吗
  • 无需支付的款项需要缴税吗
  • 餐饮调理产品有哪些
  • 预缴企业所得税是含税数还是不含税
  • 不能取得发票的财务费用怎么做明细好一点
  • 管理不善造成的损失的会计分录
  • 王者荣耀干将莫邪技能
  • php测试成功的邮件是什么
  • 联想笔记本在bios中怎么把图标和字变大
  • 公司搞活动买的车能买吗
  • 对出纳的要求
  • html页面间传数据
  • 税务局要求小规模纳税人开专票
  • nacos安装包
  • 国有企业收到财政补助如何做账
  • vue错误处理
  • 研发支出资本化支出在资产负债表哪里体现
  • 强制缓存与协商缓存的区别
  • PyTorch 深度学习实战 | DIEN 模拟兴趣演化的序列网络
  • 20221年的手抄报
  • 收到退回残保金怎么做账
  • 补缴企业所得税的计算公式
  • Php数组转json 参数不带引号
  • 贷款减值准备怎么进损益类账户
  • 现金流量的折现值
  • 企业增值税发票管理办法
  • 延期缴纳税款的问题
  • python怎么创建
  • PHP MongoDB GridFS 存储文件的方法详解
  • 万元版和十万元版发票图片
  • 增值税中进项税额转出是什么意思
  • 待抵扣进项税如何在营运资金
  • 票据背书转让挂什么科目
  • 一般纳税人第一次逾期申报处罚吗
  • 建造生产线计入什么科目
  • 公户网银转账操作流程
  • 小企业会计准则主要按照什么计量
  • mysql 使用inet_aton和inet_ntoa处理ip地址数据的实例
  • win7一直弹广告怎么办
  • XP系统如何设置变流畅
  • 做好一个服务器工作
  • WorkFlowTray.exe是什么进程
  • windows 隐藏软件
  • mac新手必看教程
  • linux禁止ping的命令
  • win10周年版
  • lsm.exe是什么进程
  • win10正式版声音不正常
  • jquery.js
  • JavaScript中数组的相关方法
  • 谈谈关于中华文明的五个突出特性
  • jquery常用选择器种类
  • Javascript字符串出现次数
  • jquery的遍历方法
  • 企业所得税调整情况说明
  • 销售农药化肥的经营范围
  • 网上如何申领电瓶车牌照
  • 收到海关进口增值税专用缴款书怎么确定库存商品的金额
  • 税务总局2017年11号公告第二条
  • 北京税务分所怎么样啊
  • 遵从和尊重
  • 山东省级高新区什么级别
  • 黄金消费税如何征收
  • 北京国税查询发票真伪查询系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设