高精度事件计时器怎么关闭_Node.js 事件循环
什么是事件循环
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 事件循环相关推荐
- 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法
关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法 参考文章: (1)关于ElementUI中MessageBox弹框的取消键盘触发 ...
- java弹窗 触发事件_关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...
好久没见了 在项目中遇到一个小小的需求,总结了一下! 详细我就不介绍了,相信大家用过的话,很了解.详见文档-----------> http://element-cn.eleme.io/#/zh ...
- js监听iframe关闭_Node.js文档NET[翻译]
Node.js v12.0.0 Documentationnodejs.org Net模块提供一个异步的网络API,这个API可以创建基于流的TCP,或者IPC服务器(net.createServe ...
- 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...
好久没见了 在项目中遇到一个小小的需求,总结了一下! 详细我就不介绍了,相信大家用过的话,很了解.详见文档-----------> http://element-cn.eleme.io/#/zh ...
- js 事件学习与总结
一.(1)事件源(事件目标):在哪个组件上发生的事件,也就是发生事件的作用体或与之相关的对象.任何元素,body,html元素等等,都可以作为事件源. (2)事件:事件就是用户或浏览器自身执行的某种动 ...
- JS事件相关知识点整理
JS事件相关知识点整理 JS事件的驱动机制 常见JS事件 点击事件---onclick 焦点事件 获取焦点事件---onfocus 失去焦点事件----onblur 域内容改变事件---onchang ...
- 由于高精度事件计时器(HPET)驱动过时导致AMD机器装Win10的卡死蓝屏问题记录
AMD机型最近频繁卡死,蓝屏,特征在于:打游戏等高负载条件,电脑没有问题:闲置一定时间之后蓝屏或者死机,鼠标键盘无反应,界面全部卡死,只能按开机键重启.未保存的数据全部丢失. 近日蓝屏代码 有两类,一 ...
- 关于js关闭窗口的事件和用法
原文地址为: 关于js关闭窗口的事件和用法 Onunload与Onbeforeunload Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本 ...
- 监听js变量的变化_Node.js从零开始——事件、系统和流
毕竟不是一个真正的教程,这里主要还是以普及和介绍为主,所以这一部分就是 Node.js 的其他部分介绍了,主要也就是事件触发.操作系统以及流的知识. 1 事件触发器 因为我们之前在浏览器中使用 Jav ...
最新文章
- Oracle二三事之 12c 可插拔数据库PDB
- 麻烦不断,Uber因保护用户隐私不力要接受20年的审计
- python_字符串有时可以比较大小哦!
- ConditionedActivityGroup
- mysql主外键引用关系,关于mysql:数据主/外键关系
- java如何实现不固定个数传参
- 操作系统(3)-线程的六大状态、基于代码实战的线程创建及六个常用方法
- 前端QRCode.js生成二维码(解决长字符串模块和报错问题)
- Web应用中优化IBatis性能
- VS找到w3wp.exe 附加到23wp.exe进行debug程序调试
- 董明珠与22岁的秘书孟羽童
- 机器学习--SVM支持向量机
- Teams App 资源中心种草指南
- day05_步入百万年薪的第五天
- 用Python的networkx绘制精美网络图
- 【渝粤题库】广东开放大学 文化创意学 形成性考核
- 带api的php探针,从零开始搭建前端监控系统(一)——web探针sdk
- Matlab学习-常用命令技巧
- c语言单片机停车场收费系统,基于51单片机停车场车位引导系统设计
- 科士达STATIONAIR系列精密空调远程监控解决方案
热门文章
- PostgreSQL update tbl1 from tbl2 一对多的注意事项(到底匹配哪条)
- 常用测试设计方法--其他
- GAE 博客——B3log Solo 0.3.0 正式版发布了!
- excel去重_Python 轻松搞定 Excel 常用的 20 个操作
- 【工程项目经验】Compile Android Error fatal error opening dependency file No such file or directory
- 服务器的虚拟路径是什么,设置服务器的虚拟路径
- 华为鸿蒙乌鸦快爷,华为鸿蒙第一批名单
- python归纳算法_【Python算法】归纳、递归、归简
- 公司顾问岗位职责_【热门推荐】泉州奥育特教育科技有限公司
- c语言会生成class文件,一文带你刨析class文件