This article will introduce you to the event loop in node.js, look at the event loop model, the various stages of the event loop, and share two interview questions about the event loop. Let’s take a look. Look!
Event Loop Model
The JavaScript engine itself does not implement the event loop mechanism. The event loop in the browser is implemented by the browser, and the event loop in NodeJS is mainly implemented by the underlying Libuv library.
The Libuv library is event-driven, which encapsulates and unifies API implementations on different platforms. NodeJS's cross-platform and event loop mechanisms are implemented through the Libuv library. [Recommended learning: "nodejs Tutorial"]
The above is divided into four steps:
1. NodeJS's V8 engine parses JavaScript code, and then call the Node API
2. NodeAPI allocates tasks to the Libuv library for processing.
3. Libuv manages the execution of these tasks through the event loop mechanism, and returns the results to V8 engine.
4. V8 engine callback processing Libuv returns
Micro tasks and macro tasks
Divide different task queues according to task types, micro task queue and macro task queue.
Macro tasks: setTimeout, setInterval, setImmediate
Micro tasks: promise.then(), promise.catch(), process.nextTick()
Events Each stage of the cycle
- timers stage: execute all setTimeout and setInterval callbacks
- pendding callback stage: callback for certain system operations. Such as TCP connection errors
- poll phase: polling to wait for new links and requests and other events, and execute I/O callbacks. For example: file reading operation
- check phase: execute setImmedidate callback
- close callback phase: close callback execution, such as socket.on( close...)
Each stage will execute the task queue of the current stage, and then execute the microtask queue of the current stage. Only after all microtasks have been executed will the entry Next stage.
Differences in event loops in browsers:
There are no multiple stages in the browser; priority levels: synchronization code, micro tasks, macro tasks
In the browser, there may be multiple queues for macro tasks, but there is only one micro task. Each time, the micro task will be executed first and then the macro task
Statement summary
Mainly learned the NodeJS event loop model, parsing the JS code from the V8 engine, and then calling NodeAPI. NodeAPI assigns tasks to the underlying Libuv library for execution. The main event loop mechanisms are all controlled by the Libuv library. Completed.
The entire event loop is divided into 6 stages: timer stage, pending callback stage, poll stage, check stage, close callback stage. The order of execution is: after the task queue in each stage is executed, the microprocessor is executed. Task, the next stage will be executed only after the microtask execution is completed. The browser's event loop is not divided into stages, and the order of priority is: synchronization code, microtasks, and macrotasks.
Interview questions
Question 1: What is your understanding of the event loop of NodeJS?
Answer: My understanding of the event loop is that Node is single-threaded. The main thread puts all tasks in the circular queue, and then the underlying libuv library takes out the tasks from the circular event queue and assigns them to Different threads handle it, and the main thread also performs callback processing at the same time, and the entire process forms an event loop.
Differences from the browser event loop:
1. The browser does not divide into multiple stages
2. Browser task priority: synchronization code, micro tasks, macros Task
Question 2: What is the order of task execution in the event queue?
Answer: The NodeJS event loop is divided into multiple stages. The execution sequence is: after one stage is completed, the microtasks are executed, and then the next stage is executed.
For more programming-related knowledge, please visit: Introduction to Programming! !
The above is the detailed content of Understand the event loop in node.js in one article. For more information, please follow other related articles on the PHP Chinese website!

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

gm是基于node.js的图片处理插件,它封装了图片处理工具GraphicsMagick(GM)和ImageMagick(IM),可使用spawn的方式调用。gm插件不是node默认安装的,需执行“npm install gm -S”进行安装才可使用。

如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node.js项目打包为可执行文件的方法,希望对大家有所帮助!

本篇文章带大家详解package.json和package-lock.json文件,希望对大家有所帮助!

本篇文章给大家分享一个Nodejs web框架:Fastify,简单介绍一下Fastify支持的特性、Fastify支持的插件以及Fastify的使用方法,希望对大家有所帮助!

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

本篇文章给大家分享一个Node实战,介绍一下使用Node.js和adb怎么开发一个手机备份小工具,希望对大家有所帮助!

先介绍node.js的安装,再介绍使用node.js构建一个简单的web服务器,最后通过一个简单的示例,演示网页与服务器之间的数据交互的实现。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Chinese version
Chinese version, very easy to use

SublimeText3 Mac version
God-level code editing software (SublimeText3)

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver CS6
Visual web development tools

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software
