zoukankan      html  css  js  c++  java
  • JavaScript 异步、栈、事件循环、任务队列

    学习链接地址:https://segmentfault.com/a/1190000011198232  https://blog.csdn.net/lc237423551/article/details/79902106

    node.js中的定时器nextTick()和setImmediate()区别分析

    http://www.jb51.net/article/57882.htm

    js是单线程的执行的,当js遇到异步处理的时候,就会将异步处理加入到任务列表中去,只有当主线程的执行栈执行完成就会去执行任务列表中的事务。

    Js 中,有两类任务队列:宏任务队列(macro tasks)和微任务队列(micro tasks)。宏任务队列可以有多个,微任务队列只有一个。那么什么任务,会分到哪个队列呢?

    • 宏任务:script(全局任务), setTimeout, setInterval, setImmediate, I/O, UI rendering.
    • 微任务:process.nextTick, Promise, Object.observer, MutationObserver.

    我们上面讲到,当stack空的时候,就会从任务队列中,取任务来执行。共分3步:

    1. 取一个宏任务来执行。执行完毕后,下一步。
    2. 取一个微任务来执行,执行完毕后,再取一个微任务来执行。直到微任务队列为空,执行下一步。
    3. 更新UI渲染。
    4. 会先执行微任务,执行完微任务之后才会去执行宏任务
    5. 在微任务中,process.nextTick 是一个特殊的任务,它会被直接插入到微任务的队首(当然了,多个process.nextTick 之间也是先入先出的),优先级最高。
  • 相关阅读:
    洛谷 P3178 [HAOI2015]树上操作
    『学习笔记』线段树合并(洛谷P4556)
    『学习笔记』树链剖分(洛谷P3384)
    洛谷 P6218 [USACO06NOV] Round Numbers S
    洛谷 P4999 烦人的数学作业
    洛谷 P4317 花神的数论题
    洛谷P2602 [ZJOI2010]数字计数
    WAMPServer多站点配置
    自定义网站根目录
    网络编程——服务器与多客户端通信
  • 原文地址:https://www.cnblogs.com/liangshuang/p/8985483.html
Copyright © 2011-2022 走看看