标签: 执行机制

  • js执行机制

    JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.

    单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务.

    这样所导致的问题是: 如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉.

    同步和异步

    利用多核 CPU 的计算能力,HTML5 提出 Web Worker 标准,允许 JavaScript 脚本创建多个线程.

    于是,JS 中出现了同步异步.

    同步

    前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。

    异步

    在做一件事的同时,还可以去处理其他事情.

    同步任务

    同步任务都在主线程上执行,形成一个执行栈

    异步任务

    JS 的异步是通过回调函数实现的


    一般而言,异步任务有以下三种类型:

    • 普通事件,如 click、resize 等
    • 资源加载,如 load、error 等
    • 定时器,包括 setInterval、setTimeout 等

    异步任务相关回调函数添加到任务队列中(任务队列也称为消息队列)

    异步JavaScript

    https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Asynchronous/Introducing

    通用异步编程概念

    https://developer.mozilla.org/zh-CN/docs/conflicting/Learn/JavaScript/Asynchronous/Introducing

    执行机制

    • 先执行执行栈中的同步任务
    • 异步任务放入任务队列中
    • 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行

    主线程不断的重复获得任务、执行任务、再获取任务、再执行,这种机制被称为事件循环Event Loop

    并发模型与事件循环 – JavaScript | MDN