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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注