全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Node.JS中事件轮询(Event Loop)的解析

当我们知道I/O操作和创建新线程的开销是巨大的!

网站延迟的开销

对于一个网站,后台大多不需要进行复杂的计算,我们的程序大多时间花费在I/O读取上。

看到一个数据:IO操作可以比数据处理慢几个数量级。高端SSD固态硬盘的读取速度可以达到200mb-700mb/s;读取1000字节需要1.4微秒。而在此期间,2GHZ频率的CPU可以执行28000个指令处理周期。而网络数据的IO甚至更慢!

NodeJS采用单线程非阻塞的架构解决老大难的IO问题

当采用多线程时,为每一个请求开启一个新的线程(Apache就是这样做的)。当并发增多,线程的消耗会十分严重。

什么是阻塞和非阻塞呢?

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

var fs = require("fs");
fs.readFile("./testfile", "utf8", function(error, file) { 
  if (error) throw error; 
  console.log("我读完文件了!");
});
console.log("我不会被阻塞!");

用node执行以下代码,会先输出我不会被阻塞,再输出我读完文件了

一个知乎的回答:

你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。

NodeJS的事件轮询

这是node虽然为单线程,但是可以处理大并发,高吞吐量的核心。一个事件轮询拥有下面三个组件

  1. 事件队列:这是一个FIFO模型的队列,一方推入事件,另一方推出事件
  2. 队列的读取轮询线程组件,也就是主角Event Loop,
  3. 单独的线程池,用来执行长任务(也就是threadpool,node底层,用C++写的,不会阻塞)


在nodejs中,只有一个主线程(也就是前面说的单线程)来不断读取轮询(书中称为调用I/O观察者)队列中是否有事件。

而对于读取文件,HTTP

请求等(现代cpu处理能力很强,事件处理相当快,导致运行速度下降的瓶颈在I/O)比较容易堵塞的事件,就在这个单线程中

执行肯定会造成堵塞,所以Event Loop

会把这类型的事件交给底层的线程池执行,并给予线程池一个回调函数,当线程池操作

完成这堵塞任务后,便把结果和回调函数一起再放入轮询队列中。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# node  # 事件轮询  # nodejs  # event  # loop  # 轮询  # JavaScript Event Loop相关原理解析  # 前端js中的事件循环eventloop机制详解  # javascript中的event loop事件循环详解  # JavaScript中EventLoop介绍  # Node.js事件循环(Event Loop)和线程池详解  # JavaScript运行机制之事件循环(Event Loop)详解  # JS事件循环机制event loop宏任务微任务原理解析  # 单线程  # 我不会  # 这本书  # 回调  # 挂起  # 这是  # 几个  # 老大难  # 就在  # 你会  # 在此  # 也要  # 不需要  # 才会  # 是指  # 告诉你  # 你自己  # 这是一个  # 这类  # 这样做 


相关文章: 如何彻底删除建站之星生成的Banner?  网站制作免费,什么网站能看正片电影?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  javascript中对象的定义、使用以及对象和原型链操作小结  网页设计与网站制作内容,怎样注册网站?  建站之星×万网:智能建站系统+自助建站平台一键生成  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  网站制作说明怎么写,简述网页设计的流程并说明原因?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  C++中引用和指针有什么区别?(代码说明)  如何在IIS中新建站点并配置端口与物理路径?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  公司网站的制作公司,企业网站制作基本流程有哪些?  建站之星下载版如何获取与安装?  如何用西部建站助手快速创建专业网站?  建站org新手必看:2024最新搭建流程与模板选择技巧  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  常州自助建站费用包含哪些项目?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何通过FTP空间快速搭建安全高效网站?  招商网站制作流程,网站招商广告语?  Android自定义listview布局实现上拉加载下拉刷新功能  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何在腾讯云服务器快速搭建个人网站?  装修招标网站设计制作流程,装修招标流程?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何通过.red域名打造高辨识度品牌网站?  制作公司内部网站有哪些,内网如何建网站?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  b2c电商网站制作流程,b2c水平综合的电商平台?  建站之星云端配置指南:模板选择与SEO优化一键生成  建站之星安装后如何配置SEO及设计样式?  如何破解联通资金短缺导致的基站建设难题?  音响网站制作视频教程,隆霸音响官方网站?  如何通过智能用户系统一键生成高效建站方案?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何通过FTP服务器快速搭建网站?  ui设计制作网站有哪些,手机UI设计网址吗?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  怎么将XML数据可视化 D3.js加载XML  建站主机是否属于云主机类型?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  如何在建站宝盒中设置产品搜索功能?  公司网站制作价格怎么算,公司办个官网需要多少钱?  建站之星安装路径如何正确选择及配置?  ,柠檬视频怎样兑换vip? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。