什么是事件循环

Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

事件循环能让 Node.js 执行非阻塞 I/O 操作,尽管JavaScript事实上是单线程的,事件循环通过在可能的情况下将相应操作分担给系统内核来实现。

因为目前主流的内核都是多线程的,内核可以处理后台执行的多个操作。当其中一个操作完成的时候,内核告诉 Node.js,与其相应的回调就被添加到轮询队列(poll queue)中,并最终得到执行。

事件循环操作

Node.js 开始的时候会初始化事件循环,处理目标脚本,脚本可能会进行异步API调用、定时任务或者process.nextTick(),然后开始进行事件循环。

下面是事件循环的操作顺序:

上图中每个框分别代表事件循环的一个阶段,每个阶段都会维持一个先进后出的可执行回调函数队列。每个阶段都有自己特殊的行为方式,即当事件循环进入一个给定的阶段,它执行这个阶段的任何操作,然后执行这个阶段队列中的回调函数直到队列为空,或者回调函数调用次数达到上限。当满足这两个条件后,事件循环会进入下一个阶段。

各个阶段介绍

  • timers(计时器):本阶段执行通过setTimeout() 和 setInterval() 安排的回调函数。
  • I/O callback: 执行几乎全部发生异常的 close 回调, 由定时器和setImmediate()计划的回调。
  • idle,prepare:内部使用。
  • poll(轮询): 获取新的 I/O 事件,nodejs这时会根据实际情况进行阻塞。
  • check: 由setImmediate() 设置的回调函数。
  • close callbacks: 例如 socket.on('close', ... )设置回调。

在事件循环运行之间,Node.js 检查是否有正在等待的异步I/O 或者定时器,如果没有就清除并结束事件循环。

事件驱动程序

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。

Node.js有多个内置的事件,可以通过引入 events 模块,,并通过实例化 EventEmitter 类来绑定和监听事件。

示例:

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

绑定事件处理程序:

eventEmitter.on('eventName', eventHandler);

通过程序触发事件:

eventEmitter.emit('eventName');

下列是完整代码(drive.js):

var events = require('events');
var eventEmitter = new events.EventEmitter();var connectHandler = function connected() {console.log('连接成功');eventEmitter.emit('data_received');
}eventEmitter.on('connection', connectHandler);eventEmitter.on('data_received', function(){console.log('数据接收成功');
});// 触发 connection 事件
eventEmitter.emit('connection');
console.log("程序执行完毕");

启动drive.js文件:

> node drive.js
连接成功
数据接收成功
程序执行完毕

更多可以查看:https://www.9xkd.com/3716132715.html

高精度事件计时器怎么关闭_Node.js 事件循环相关推荐

  1. 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法

    关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法 参考文章: (1)关于ElementUI中MessageBox弹框的取消键盘触发 ...

  2. java弹窗 触发事件_关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...

    好久没见了 在项目中遇到一个小小的需求,总结了一下! 详细我就不介绍了,相信大家用过的话,很了解.详见文档-----------> http://element-cn.eleme.io/#/zh ...

  3. js监听iframe关闭_Node.js文档NET[翻译]

    Node.js v12.0.0 Documentation​nodejs.org Net模块提供一个异步的网络API,这个API可以创建基于流的TCP,或者IPC服务器(net.createServe ...

  4. 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...

    好久没见了 在项目中遇到一个小小的需求,总结了一下! 详细我就不介绍了,相信大家用过的话,很了解.详见文档-----------> http://element-cn.eleme.io/#/zh ...

  5. js 事件学习与总结

    一.(1)事件源(事件目标):在哪个组件上发生的事件,也就是发生事件的作用体或与之相关的对象.任何元素,body,html元素等等,都可以作为事件源. (2)事件:事件就是用户或浏览器自身执行的某种动 ...

  6. JS事件相关知识点整理

    JS事件相关知识点整理 JS事件的驱动机制 常见JS事件 点击事件---onclick 焦点事件 获取焦点事件---onfocus 失去焦点事件----onblur 域内容改变事件---onchang ...

  7. 由于高精度事件计时器(HPET)驱动过时导致AMD机器装Win10的卡死蓝屏问题记录

    AMD机型最近频繁卡死,蓝屏,特征在于:打游戏等高负载条件,电脑没有问题:闲置一定时间之后蓝屏或者死机,鼠标键盘无反应,界面全部卡死,只能按开机键重启.未保存的数据全部丢失. 近日蓝屏代码 有两类,一 ...

  8. 关于js关闭窗口的事件和用法

    原文地址为: 关于js关闭窗口的事件和用法 Onunload与Onbeforeunload Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本 ...

  9. 监听js变量的变化_Node.js从零开始——事件、系统和流

    毕竟不是一个真正的教程,这里主要还是以普及和介绍为主,所以这一部分就是 Node.js 的其他部分介绍了,主要也就是事件触发.操作系统以及流的知识. 1 事件触发器 因为我们之前在浏览器中使用 Jav ...

最新文章

  1. Oracle二三事之 12c 可插拔数据库PDB
  2. 麻烦不断,Uber因保护用户隐私不力要接受20年的审计
  3. python_字符串有时可以比较大小哦!
  4. ConditionedActivityGroup
  5. mysql主外键引用关系,关于mysql:数据主/外键关系
  6. java如何实现不固定个数传参
  7. 操作系统(3)-线程的六大状态、基于代码实战的线程创建及六个常用方法
  8. 前端QRCode.js生成二维码(解决长字符串模块和报错问题)
  9. Web应用中优化IBatis性能
  10. VS找到w3wp.exe 附加到23wp.exe进行debug程序调试
  11. 董明珠与22岁的秘书孟羽童
  12. 机器学习--SVM支持向量机
  13. Teams App 资源中心种草指南
  14. day05_步入百万年薪的第五天
  15. 用Python的networkx绘制精美网络图
  16. 【渝粤题库】广东开放大学 文化创意学 形成性考核
  17. 带api的php探针,从零开始搭建前端监控系统(一)——web探针sdk
  18. Matlab学习-常用命令技巧
  19. c语言单片机停车场收费系统,基于51单片机停车场车位引导系统设计
  20. 科士达STATIONAIR系列精密空调远程监控解决方案

热门文章

  1. PostgreSQL update tbl1 from tbl2 一对多的注意事项(到底匹配哪条)
  2. 常用测试设计方法--其他
  3. GAE 博客——B3log Solo 0.3.0 正式版发布了!
  4. excel去重_Python 轻松搞定 Excel 常用的 20 个操作
  5. 【工程项目经验】Compile Android Error fatal error opening dependency file No such file or directory
  6. 服务器的虚拟路径是什么,设置服务器的虚拟路径
  7. 华为鸿蒙乌鸦快爷,华为鸿蒙第一批名单
  8. python归纳算法_【Python算法】归纳、递归、归简
  9. 公司顾问岗位职责_【热门推荐】泉州奥育特教育科技有限公司
  10. c语言会生成class文件,一文带你刨析class文件