/xia栽ke:52xueit.com/567/
简短介绍:JavaScript是一种单线程编程语言,这意味着在任何给定时刻,它只能执行一个任务。然而,这并不意味着JavaScript不能处理并发操作,比如网络请求、DOM操作或者计时器触发。这一切都归功于其独特的事件循环机制。事件循环允许JavaScript在等待某些操作完成的同时继续执行其他任务,从而实现非阻塞式编程。
简单点来说:事件循环机制弥补了单线程语言js不能处理并发操作的缺点,使其不需要等待某些操作的完成就去执行其他任务,大大节省了时间和资源。
历史背景:事件循环的概念最早出现在早期的GUI系统中,但真正使其流行的是Node.js。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它利用事件驱动和非阻塞I/O模型,能够轻松地构建高性能、可扩展的网络应用。事件循环在Node.js中的应用,极大地提高了JavaScript处理高并发的能力,同时也影响了浏览器端JavaScript的异步处理方式。
在理解事件循环之前,你需要理解同步和异步的概念:
同步:代码从上往下执行,遇到耗时的代码需等待完成才能执行下一行代码。
同步代码示例:
Javascript复制代码function syncFunction() { console.log('Start'); const result = someTimeConsumingOperation(); // 假设这是一个耗时的操作 console.log('Result:', result); console.log('End'); } syncFunction();
在上面的例子中,someTimeConsumingOperation会阻塞后续代码的执行,等它完成,后面的代码才能执行。
异步:遇到需要耗时的代码,那就先挂起,先执行不耗时的代码,等到不耗时的代码执行完了,执行引擎腾出手了,再来执行耗时代码。
异步代码示例:
Javascript复制代码function asyncFunction() { console.log('Start'); someAsyncOperation((result) => { // 异步操作,传入回调函数 console.log('Result:', result); }); console.log('End'); } asyncFunction();
在这个例子中,someAsyncOperation接受一个回调函数作为参数。它立即返回,允许后面的console.log('End');立即执行。当someAsyncOperation完成后,它会调用回调函数,打印结果。所以打印顺序为Start,End,最后才是result变量。
2.事件循环机制定义和作用
定义:事件循环是 JavaScript 中一种重要的异步执行机制。
作用:管理和协调各种异步任务的执行顺序,保证 JavaScript 代码的执行顺序和预期一致。(简单点理解:我们自己写的代码我们是能够理解它的一个执行顺序的,这是你的预期,而执行引擎需要靠着事件循环机制来保证真实的执行顺序不会偏离你预期。)
那么事件循环机制又是如何发挥它的作用呢?这是关键。
3.事件循环组成部分
主线程(调用栈):执行任务;
任务队列:存放异步任务;
事件循环线程:检查任务队列里面的异步任务,有的话将异步任务调入主线程执行。
异步任务分为宏任务和微任务,因此队列也分为宏任务队列和微任务队列。
领取专属 10元无门槛券
私享最新 技术干货