全网整合营销服务商

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

免费咨询热线: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宏任务微任务原理解析  # 单线程  # 我不会  # 这本书  # 回调  # 挂起  # 这是  # 几个  # 老大难  # 就在  # 你会  # 在此  # 也要  # 不需要  # 才会  # 是指  # 告诉你  # 你自己  # 这是一个  # 这类  # 这样做 


相关文章: 家具网站制作软件,家具厂怎么跑业务?  建站主机空间推荐 高性价比配置与快速部署方案解析  微课制作网站有哪些,微课网怎么进?  如何在阿里云虚拟主机上快速搭建个人网站?  5种Android数据存储方式汇总  Swift中switch语句区间和元组模式匹配  网站制作员失业,怎样查看自己网站的注册者?  香港服务器如何优化才能显著提升网站加载速度?  如何彻底卸载建站之星软件?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  宝塔面板创建网站无法访问?如何快速排查修复?  如何快速搭建FTP站点实现文件共享?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  内部网站制作流程,如何建立公司内部网站?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  小型网站制作HTML,*游戏网站怎么搭建?  建站主机选哪家性价比最高?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  微信h5制作网站有哪些,免费微信H5页面制作工具?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  如何用AWS免费套餐快速搭建高效网站?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  如何在宝塔面板中创建新站点?  如何在宝塔面板创建新站点?  如何在万网主机上快速搭建网站?  高端企业智能建站程序:SEO优化与响应式模板定制开发  魔毅自助建站系统:模板定制与SEO优化一键生成指南  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  制作电商网页,电商供应链怎么做?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在Windows环境下新建FTP站点并设置权限?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  广东专业制作网站有哪些,广东省能源集团有限公司官网?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  详解jQuery停止动画——stop()方法的使用  高防服务器租用首荐平台,企业级优惠套餐快速部署  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何用腾讯建站主机快速创建免费网站?  济南网站制作的价格,历城一职专官方网站?  建站之星后台密码遗忘?如何快速找回?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  php json中文编码为null的解决办法  网页设计与网站制作内容,怎样注册网站?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南 

您的项目需求

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