JavaScript 的任务调度机制

JavaScript 的任务调度机制是基于 事件循环(Event Loop) 的,它管理了不同类型的任务队列。总的来说,任务调度机制涉及到三种主要的任务队列:

  1. 同步任务(Synchronous Tasks)
  2. 微任务(Microtasks)
  3. 宏任务(Macrotasks)

在某些情况下,我们还可以提到 交互队列延迟队列,它们可以视为宏任务的一部分。以下是它们的详细介绍、执行顺序和示例:

1. 同步任务(Synchronous Tasks)

  • 同步任务是指代码中按顺序执行的任务。这些任务会先被执行,直到执行栈清空。
  • 特点:同步任务是JavaScript执行的主要任务,必须按顺序执行,无法中断。

执行顺序:

  • 同步任务先执行。

示例:

console.log('Start');
console.log('End');

输出顺序:

Start
End

2. 微任务(Microtasks)

微任务是指那些在同步任务执行完后、下一个宏任务开始前执行的任务。微任务的优先级比宏任务高,因此它们会在当前栈清空后立刻执行。

  • 常见的微任务

    • Promise.then().catch().finally() 回调
    • queueMicrotask()
    • MutationObserver

执行顺序:

  • 执行同步任务。
  • 执行所有微任务,直到微任务队列清空。
  • 然后才会开始执行宏任务。

示例:

console.log('Start');

setTimeout(() => {
    console.log('Timeout 1');
}, 0);

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

setTimeout(() => {
    console.log('Timeout 2');
}, 0);

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

console.log('End');

输出顺序:

Start
End
Promise 1
Promise 2
Timeout 1
Timeout 2
  • 执行过程

    • 先执行同步代码:StartEnd
    • 然后执行微任务队列中的任务:Promise 1Promise 2
    • 最后执行宏任务队列中的任务:Timeout 1Timeout 2

3. 宏任务(Macrotasks)

宏任务包括所有的异步任务和UI更新任务。它们的执行顺序是按队列顺序来执行的,每次执行一个宏任务。

  • 常见的宏任务

    • setTimeoutsetInterval
    • I/O 操作(例如文件读取、网络请求等)
    • 用户交互事件(点击、键盘输入等)

执行顺序:

  • 执行同步任务。
  • 执行所有微任务。
  • 执行宏任务(例如 setTimeout、事件监听等)。

示例:

setTimeout(() => {
    console.log("Timeout 1");
}, 0);

setTimeout(() => {
    console.log("Timeout 2");
}, 0);

console.log("Start");

输出顺序:

Start
Timeout 1
Timeout 2
  • 执行过程

    • 先执行同步代码:Start
    • 然后执行宏任务队列中的任务:Timeout 1Timeout 2

4. 交互队列(Interaction Queue)

交互队列包含与用户交互相关的事件,如点击、输入框事件等。这些事件会作为宏任务的一部分,通常是在宏任务执行后、微任务执行前执行。

  • 常见的交互队列事件

    • clickkeydowninput 等。

执行顺序

  • 宏任务中的异步任务完成后,事件循环会处理交互队列中的任务。

示例:

document.body.addEventListener('click', () => {
    console.log('Click event');
});

执行过程

  • 用户点击页面后,点击事件会被加入到交互队列,并在下一轮事件循环中执行。

5. 延迟队列(Delayed Queue)

延迟队列实际上是宏任务队列的一部分,专门处理带有延迟时间的任务(如 setTimeoutsetInterval)。这些任务会在延迟时间到期后进入队列,并作为宏任务执行。

  • 常见的延迟队列任务

    • setTimeoutsetInterval

执行顺序

  • 延迟队列的任务是宏任务的一部分,会在当前宏任务执行完后、下一个宏任务之前执行。

示例:

setTimeout(() => {
    console.log('Delayed Timeout');
}, 1000);

执行过程

  • 任务会在大约 1000 毫秒后被加入宏任务队列。

总结:JavaScript 任务调度机制的队列

JavaScript 主要通过事件循环管理不同的任务队列,每种队列的任务执行顺序如下:

  1. 同步任务:首先执行,执行栈中的代码。
  2. 微任务队列:在同步任务执行后、宏任务之前执行。优先级较高。
  3. 宏任务队列(包含延迟队列):在微任务执行完后执行。宏任务包含 setTimeoutsetInterval 等异步任务。
  4. 交互队列:处理与用户交互相关的事件,通常在宏任务和微任务之间执行。

执行流程:

  1. 执行同步任务。
  2. 执行所有微任务,直到微任务队列为空。
  3. 执行交互队列中的任务。
  4. 执行宏任务队列中的任务(如延迟队列中的 setTimeout 回调)。

示例总结:

console.log("Start");

setTimeout(() => {
    console.log("Timeout 1");
}, 0);

Promise.resolve().then(() => {
    console.log("Promise 1");
});

document.body.addEventListener('click', () => {
    console.log("Click Event");
});

setTimeout(() => {
    console.log("Timeout 2");
}, 0);

console.log("End");

输出顺序:

Start
End
Promise 1
Timeout 1
Click Event
Timeout 2

事件循环在处理任务时,会先执行同步代码,然后清空微任务队列,接着处理交互队列中的任务,再执行宏任务队列中的任务。

JavaScript

我来吐槽

*

*

已有 3 条评论

  1. HarveyCom

    Кошельки тоже нуждаются в каникулах. Новый исследование о Travel Trends 2025 по сравнению с системой поиска авиабилетов выявил пункты назначения с самыми большими уменьшениями цен авиабилеты в Соединенных Штатах за последний год.
    Лидеры списка—Средиземноморский курортный город французская Ницца, популярный курорт для путешественников Ривьеры. Тарифы в городе упали на двадцать семь процентов в первой половине 2024 года, по сравнению с тем же периодом ранее.
    Если это солнце Кариб, вы преследуете, то стоимости в Кастри, Сент-Люсии (№ 2) и Барбадос (№ 3), снизились на 25% и 24 процента соответственно.
    Год спустя после его катастрофического тремора в двадцать двадцать третьем году, Марокко восстанавливает свою индустрию туризма и встречает туристов. Стоимость в своем столичном городе, Рабат, Марокко, пошли вниз на двадцать четыре процента.
    Мир животных
    Этот год оказался активным приключениями для наших животных.
    Неделя медведям Северной Аляски в рамках традиции. В волнующем и индивидуальном матче для мести самица медведя сбила последнего соперника в игре - возвращении погубившего одного из ее детенышей летом прошлого года, чтобы защитить свой титул на две тысячи двадцать четвертый.
    Первоисточник [url=https://rutorg.top/w001-splash-2s.html]rutorg.top[/url]

  2. pharmacy

    I am not sure where you are getting your information, but good topic.

    I needs to spend some time learning much more or understanding more.
    Thanks for excellent info I was looking for this information for my mission.

  3. RobertJeota

    Где Купить Мефедрон? САЙТ - KOKAIN.VIP Сколько стоит Мефедрон? САЙТ - KOKAIN.VIP

    КУПИТЬ НА САЙТЕ - https://kokain.vip/

    ЗАКАЗАТЬ ЧЕРЕЗ ТЕЛЕГРАММ- https://kokain.vip/

    ДОСТАВКА В РУКИ - https://kokain.vip/

    ЗАКЛАДКА ОНЛАЙН - https://kokain.vip/

    ССЫЛКА В ТЕЛЕГРАММ - https://kokain.vip/
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    Теги поисковых слов для запроса "Мефедрон в Москве"
    Где Купить Мефедрон в Москве? Как Купить закладку Мефедрона в Москве? Цена на Мефедрон в Москве? Купить Мефедрон с Доставкой в руки в Москве?
    Сколько Стоит Мефедрон в Москве? Почему так просто Купить Мефедрон закладкой в Москве? Гарантия на Мефедрон в Москве? Купить Мефедрон с Гарантией?
    Круглосуточные магазины Мефедрона в Москве? Оптовые и Розничные продажи Мефедрона в Москве? Купить Мефедрон в Москве через Телеграмм? Лучший Мефедрон Купить?
    Купить Мефедрон в Москве по скидке и хорошей цене? Купить Мефедрон в Москве через свой телефон или ноутбук можно легко? Сколько где Мефедрона стоит цена?
    Как купить Мефедрон в Москве если нет очень много денег и нужно угостить девушку? С кем можно разделить грамм Мефедрон в Москве?
    Не плохой или хороший Мефедрон можно Купить в Москве на своей улице закладкой? Девушка угостила меня Хорошим Мефедроном в Москве из магазина?
    Мои друзья любят употреблять Мефедрон в Москве днем вечером и ночью и потом не спят целые сутки под Мефедрон в Москве? Мой любимый Мефедрон на планете купить?
    Мефедрон в Москве можно заказать с доставкой в руки через хорошего курьера прямо в теллеграмм и его привезут в руки без палева в Москве?
    Мой Мефедрон в Москве можно на выставке показывать потому что такой Мефедрон в Москве никто и никогда не виде подобного качества тут просто нет?
    Как хороший Мефедрон в Москве качественный провозят через границу из других стран чтоб люди радовались качеству Мефедрон в Москве? Очень купить Мефедрон советовали!
    Как ведут себя люди когда употребляют хороший качественный Мефедрон в Москве чтоб не спалиться в черных очках, которые цветом как Мефедрон в Москве?
    Могут ли принять мусора за Мефедрон в Москве если узнают что ты берешь его анонимно на сайте с гарантией который много лет продает Мефедрон в Москве?
    Все люди по разному реагируют и задают себе вопрос, на который уже есть давно ответ - Как же купить Мефедрон в Москве если хочеться качественного Мефедрона?

    Дополнительные теги - Купить Шишки в Москве, Купить экстази в Москве , Купить гашиш в Москве, Купить мефедрон в Москве, Купить экстази в Москве, Купить МДМА в Москве,
    Купить лсд в Москве, Купить Амфетамин в Москве, Купить скорость альфа ПВП в Москве, Купить гидропонику в Москве, Купить метамфетамин в Москве, Купить эйфоретики в Москве,
    Купить закладки в Москве, Купить ШИШКИ закладкой в Москве , Купить Стимуляторы в Москве, Купить Галлюцыногены в Москве, Купить Наркотики закладкой в Москве. Тег окончен