首页 > 编程语言 >Node.js Event Loop 处理的几大周期介绍

Node.js Event Loop 处理的几大周期介绍

时间:2022-12-10 18:56:11浏览次数:46  
标签:Node 负载 应用程序 js 事件 回调 Event

Node.js Event Loop 处理的几大周期如下图所示:

  • Timer:通过 setTimeout() 或 setInterval() 安排的一切都将在这里处理。

  • IO 回调:这里将处理大部分回调。 由于 Node.js 中的所有用户态代码基本上都在回调中(例如,对传入 http 请求的回调会触发级联回调),这就是用户态代码。

  • IO轮询:轮询下一次运行要处理的新事件。

  • Set Immediate:运行通过 setImmediate() 注册的所有回调。

  • close:这里处理了所有 on('close') 事件回调。

实际上 Node 应用程序中发生的一切都通过事件循环运行。这意味着,如果我们可以从中获取指标,它们应该会为我们提供有关应用程序整体健康状况和性能的宝贵信息。

如果应用程序处于空闲状态,这意味着没有待处理的任务(定时器、回调等),全速运行这些阶段是没有意义的,因此事件循环将适应这种情况并在 等待新的外部事件进入的轮询阶段。

这也意味着,无负载下的指标与高负载下与慢速后端通信的应用程序相似(低频率、高持续时间)。

Event Loop Latency

事件循环延迟衡量在使用 setTimeout(X) 安排的任务真正得到处理之前还需要多长时间。

高事件循环延迟表示事件循环忙于处理回调。

Node.js 应用程序在单个线程上运行。 在多核机器上,这意味着负载不会分布在所有内核上。 使用 Node 附带的集群模块,可以很容易地为每个 CPU 生成一个子进程。 每个子进程维护自己的事件循环,主进程透明地在所有子进程之间分配负载。

如前所述,libuv 将创建一个大小为 4 的线程池。可以通过设置环境变量 UV_THREADPOOL_SIZE 来覆盖池的默认大小。
虽然这可以解决 I/O 密集型应用程序的负载问题,但在生产系统上进行这项改动之前,务必进行负载测试,因为更大的线程池可能仍会耗尽内存或 CPU.

标签:Node,负载,应用程序,js,事件,回调,Event
From: https://www.cnblogs.com/sap-jerry/p/16972085.html

相关文章

  • js之操作文件| 12-5
    在HTML表单中,可以上传文件的唯一控件就是​​<inputtype="file">​​。注意:当一个表单包含​​<inputtype="file">​​时,表单的​​enctype​​必须指定为​​multipart/f......
  • JS——DOM
    HTMLDOM(文档对象模型)DOM是一项W3C(WorldWideWebConsortium)标准。当网页被加载时,浏览器会创建页面的文档对象模型(DocumentObjectModel)通过DOM,JavaScript获得创建动......
  • lightdb/postgresql----JSON/JSONB类型、函数及全文检索的支持以及性能表现
    createtabletest_ft(idint4,arryVARCHAR[],content1jsonb,bodytext);insertintotest_ftvalues(1,ARRAY['x','y'],'{"guid":"9c36adc1-7fb5-4d5b-83b4-90356a4......
  • 143-js宽松相等和严格相等
    宽松相等(looseequals)==严格相等(strictequals)===常见的误区是:“==检查值是否相等,===检查值和类型是否相等”正确的解释是:==允许在相等比较中进行强制类型转换,而===不......
  • EventTarget.addEventListener() - Web API 接口参考
    EventTarget.addEventListener()-WebAPI接口参考  ​​https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener#%E8%AF%AD%E6%B3%95​​ ......
  • 学习Delphi原生JSON框架(三)TJsonArray
    基于前面写的内容,我们可以快速读取一个数组的JSON串了,直接上代码:procedureTForm6.Button2Click(Sender:TObject);beginvarjsonstr:='{'+'"......
  • 学习Delphi原生JSON框架(二)TJsonArray
    前面写了如何快速读取一个JSON串,但只是针对简单的类型,如果JSON串中有数组该怎么办呢?一、例子代码先看下面的代码,读取一个学生的各科成绩。procedureTForm6.Button1Click(Se......
  • 【精选】前端JS面试题35个
    1.问:什么是匿名函数?作用是什么?     答:没有名字的函数就是匿名函数,作用有三,把函数当作变量赋值,把函数当作参数(回调函数),把函数当作另一个函数的返回值(闭包)......
  • VUE项目启动: npm install --save core-js/modules/es.error.cause.js
    完美解决,按照给的方法。以下是链接:https://blog.csdn.net/qq_41071929/article/details/123920642?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.non......
  • JS基础2
    运算符•算术运算符   •赋值运算符   •一元运算符   •比较运算符      •逻辑运算符         •运......