全网整合营销服务商

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

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


相关文章: 网页设计与网站制作内容,怎样注册网站?  如何在万网主机上快速搭建网站?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  免费ppt制作网站,有没有值得推荐的免费PPT网站?  网站图片在线制作软件,怎么在图片上做链接?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  如何用虚拟主机快速搭建网站?详细步骤解析  如何通过VPS建站无需域名直接访问?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  建站之星如何修改网站生成路径?  建站上市公司网站建设方案与SEO优化服务定制指南  SQL查询语句优化的实用方法总结  如何用狗爹虚拟主机快速搭建网站?  如何快速生成高效建站系统源代码?  开源网站制作软件,开源网站什么意思?  山东网站制作公司有哪些,山东大源集团官网?  名字制作网站免费,所有小说网站的名字?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  制作网页的网站有哪些,电脑上怎么做网页?  大连 网站制作,大连天途有线官网?  python的本地网站制作,如何创建本地站点?  如何挑选优质建站一级代理提升网站排名?  高端网站建设与定制开发一站式解决方案 中企动力  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  如何零成本快速生成个人自助网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  建站之星多图banner生成与模板自定义指南  如何用免费手机建站系统零基础打造专业网站?  如何批量查询域名的建站时间记录?  建站主机无法访问?如何排查域名与服务器问题  微课制作网站有哪些,微课网怎么进?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  建站之星24小时客服电话如何获取?  建站之星如何实现PC+手机+微信网站五合一建站?  建站之星3.0如何解决常见操作问题?  广德云建站网站建设方案与建站流程优化指南  如何选择高效稳定的ISP建站解决方案?  如何通过商城自助建站源码实现零基础高效建站?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  如何在七牛云存储上搭建网站并设置自定义域名?  如何在建站之星绑定自定义域名?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  建站之家VIP精选网站模板与SEO优化教程整合指南  安徽网站建设与外贸建站服务专业定制方案  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台? 

您的项目需求

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