当前位置:网站首页>Event_looop-事件循环机制
Event_looop-事件循环机制
2022-07-28 05:18:00 【SheepOnTheCloud】
一,什么是Event_loop
Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。
二,事件循环的进程模型
1,选择当前要执行的任务队列,选择任务队列中最先进入的任务,如果任务队列为空,即null,则执行跳转到微任务(MicroTaks)的执行步骤
2,将事件循环中的任务设置为已选择任务
3,执行任务
4,将事件循环中当前运行任务设置为null
5,将已经运行完成的任务从任务队列中删除
6,microtasks步骤,进入microtask检查点
7,更新界面渲染
8,返回第一步

执行进入microtask检查点时,用户代理会执行以下步骤:
设置microtask检查点标志为true。
当事件循环microtask执行不为空时:选择一个最先进入的microtask队列的microtask,将事件循环的microtask设置为已选择的microtask,运行microtask,将已经执行完成的microtask为null,移出microtask中的microtask。
清理IndexDB事务
设置进入microtask检查点的标志为false。
原文链接:https://blog.csdn.net/weixin_53504991/article/details/115455041

三,NodeJS的Event Loop
Node中的Event Loop是基于libuv实现的,而libuv是 Node 的新跨平台抽象层,libuv使用异步,事件驱动的编程方式,核心是提供i/o的事件循环和异步回调。libuv的API包含有时间,非阻塞的网络,异步文件操作,子进程等等。 Event Loop就是在libuv中实现的。
什么是libuv?
Libuv是Node.js的多平台支持库,主要用于异步I/O。它主要是为Node.js开发的,随着时间的推移,它被广泛用于其他系统,如Luvit、pyuv、Julia等。Libuv基本上是对依赖于平台的libev/IOCP的抽象,为用户提供基于libev的API。
libuv的一些重要特性是:
- 支持全功能事件循环
- 文件系统事件
- 异步文件和文件系统操作
- 异步TCP和UDP套接字
- 子进程

Node的Event loop一共分为6个阶段,每个细节具体如下:

- timers: 执行setTimeout和setInterval中到期的callback。
- pending callback: 上一轮循环中少数的callback会放在这一阶段执行。
- idle, prepare: 仅在内部使用。
- poll: 最重要的阶段,执行pending callback,在适当的情况下回阻塞在这个阶段。
- check: 执行setImmediate(setImmediate()是将事件插入到事件队列尾部,主线程和事件队列的函数执行完成之后立即执行setImmediate指定的回调函数)的callback。
- close callbacks: 执行close事件的callback,例如socket.on('close'[,fn])或者http.server.on('close, fn)。
- Node 与浏览器的 Event Loop 差异
- 浏览器环境下,microtask 的任务队列是每个 macrotask 执行完之后执行。而在 Node.js 中,microtask 会在事件循环的各个阶段之间执行,也就是一个阶段执行完毕,就会去执行 microtask 队列的任务。
总结
浏览器和 Node 环境下,microtask 任务队列的执行时机不同Node 端,microtask 在事件循环的各个阶段之间执行
浏览器端,microtask 在事件循环的 macrotask 执行完之后执行
边栏推荐
- Review of Metallurgical Physical Chemistry - gas liquid phase reaction kinetics
- Problems encountered when the registry service Eureka switches to nocas
- Operation and use of collection framework
- C语言回顾(修饰词篇)
- Writing methods of scientific research papers: add analysis and discussion in the method part to explain their contributions and differences
- Delete specific elements in order table OJ
- 深度学习医学图像模型复现
- 冶金物理化学复习 ---- 气固反应动力学
- openjudge:矩阵乘法
- Advanced multi threading: the underlying principle of synchronized, the process of lock optimization and lock upgrade
猜你喜欢

冶金物理化学复习 --- 金属的电沉积,还原过程

Writing methods of scientific research papers: add analysis and discussion in the method part to explain their contributions and differences

How Visio can quickly generate the same pattern and image matrix

visio如何快速生成相同的图案,生成图像矩阵

对极大似然估计、梯度下降、线性回归、逻辑回归的理解

shell运行原理

Framework step by step easy-to-use process

Fusiongan code learning (I)

Arrangement of main drawings of the latest 54 papers of eccv22

顺序表oj题目
随机推荐
SSM project quick build project configuration file
Lamda gets the current number of cycles, atomicinteger
Shell operation principle
Oracle create table, delete table, modify table (add field, modify field, delete field) statement summary
openjudge:校园食宿预订系统
环形链表问题
Openjudge: perpetual calendar
Openjudge: judge whether the string is palindrome
c语言:通过一个例子来认识函数栈帧的创建和销毁讲解
标准C语言学习总结5
冶金物理化学复习 --- 金属的电沉积,还原过程
Oracle view lock table statement and unlocking method
标准C语言总结4
冶金物理化学复习 -- 金属电沉积过程中的阴极极化,超电势以及阳极和阳极过程
记录某某小卢的第一篇文章
C语言回顾(修饰词篇)
标准C语言总结1
Redis' bloom filter
pytorch使用hook获得特征图
openjudge:病人排队