简述异步线程、轮询机制、宏任务微任务

101 阅读2分钟

简述异步线程、轮询机制、宏任务微任务

在 JavaScript 中,异步编程是其核心特性之一。为了更好地理解异步编程,需要掌握以下几个概念:异步线程轮询机制宏任务微任务

1. 异步线程

  • 定义

    • JavaScript 是单线程语言,但浏览器或 Node.js 提供了多线程能力(如 Web Workers、Node.js 的 worker_threads)。
  • 作用

    • 将耗时的任务(如网络请求、文件读写)放到异步线程中执行,避免阻塞主线程。
// 使用 Web Workers 创建异步线程
const worker = new Worker('worker.js');
worker.postMessage('Start');
worker.onmessage = function(event) {
  console.log('Received:', event.data);
};

2. 轮询机制

  • 定义

    • 轮询机制是事件循环(Event Loop)的核心,用于检查任务队列中是否有待执行的任务。
  • 工作流程

    1. 执行同步任务。

    2. 检查微任务队列,执行所有微任务。

    3. 检查宏任务队列,执行一个宏任务。

    4. 重复上述步骤。

console.log('Start'); // 同步任务
setTimeout(() => console.log('Timeout'), 0); // 宏任务
Promise.resolve().then(() => console.log('Promise')); // 微任务
console.log('End'); // 同步任务
// 输出顺序: Start → End → Promise → Timeout

3. 宏任务(Macro Task)

  • 定义

    • 宏任务是较大的任务单元,通常包括:

      • setTimeoutsetInterval

      • I/O 操作(如文件读写、网络请求)

      • UI 渲染

  • 特点

    • 每次事件循环只执行一个宏任务。
setTimeout(() => console.log('Timeout'), 0);

4. 微任务(Micro Task)

  • 定义

    • 微任务是较小的任务单元,通常包括:

      • Promise 的回调(thencatchfinally

      • MutationObserver

      • queueMicrotask

  • 特点

    • 每次事件循环会执行所有微任务。

    • 微任务的优先级高于宏任务。

Promise.resolve().then(() => console.log('Promise'));

5. 事件循环(Event Loop)

  • 定义

    • 事件循环是 JavaScript 实现异步编程的核心机制,负责调度宏任务和微任务。
  • 工作流程

    1. 执行同步任务。

    2. 检查微任务队列,执行所有微任务。

    3. 检查宏任务队列,执行一个宏任务。

    4. 重复上述步骤。

console.log('Start'); // 同步任务
setTimeout(() => console.log('Timeout'), 0); // 宏任务
Promise.resolve().then(() => console.log('Promise')); // 微任务
console.log('End'); // 同步任务
// 输出顺序: Start → End → Promise → Timeout

总结

概念描述示例
异步线程将耗时任务放到异步线程中执行Web Workers、Node.js 的 worker_threads
轮询机制事件循环的核心,检查任务队列事件循环的工作流程
宏任务较大的任务单元,每次执行一个setTimeout、setInterval
微任务较小的任务单元,每次执行所有Promise、MutationObserver

理解异步线程、轮询机制、宏任务和微任务的关系,有助于更好地掌握 JavaScript 的异步编程模型。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github