zoukankan      html  css  js  c++  java
  • Js运行机制Event Loop

    一 JS运行机制:http://www.ruanyifeng.com/blog/2014/10/event-loop.html

    JavaScript是单线程运行的(防止多个线程操作DOM,无法判断以哪个线程为准),HTML5提出WebWorker可以创建子线程,该线程完全受控制与主线程,且不能操作DOM(子线程可用于计算复杂数据)。

    单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。JavaScript分为同步任务(synchronous)与异步任务(asynchronous)

    • 同步任务在主线程上执行,形成执行栈(execution context stack);
    • 主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
    • 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
    • 主线程不断重复上面的第三步。

    二 JS异步任务:指的是不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。

    异步任务分为:

    1 宏任务:宏任务就是将当前任务放在下一个任务列最顶部。script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering。

    2 微任务:微任务会将当前任务放入下一个任务列的底部。Promises, Object.observe(已废弃;Proxy 对象替代), MutationObserver,process.nextTick(Node.js)

    宏任务与微任务执行顺序

  • 相关阅读:
    python smtplib email
    python merry -- error handling in the real world
    python os.path
    python logging
    Python演讲笔记1
    python DBUtils.PooledDB 中 maxcached 和 maxconnections
    Effective Python2 读书笔记3
    Effective Python2 读书笔记2
    MVC验证session是否过期,在每个action执行之前验证
    int类型的正负数转换
  • 原文地址:https://www.cnblogs.com/terrymin/p/14550296.html
Copyright © 2011-2022 走看看