网站的后台建设seo广告投放
同步任务和异步任务
同步任务
同步任务就是没有被引擎挂起、在主线程上排队执行的任务。只有前一个任务执行完,才会执行下一个任务。同步任务具有堵塞效果。
异步任务
异步任务是被引擎放在一边,不进入主线程进入任务队列的任务。只有引擎认为某个异步任务可以执行了,该任务才会进入主线程去执行。排在异步后面的代码不用等待异步结束会马上执行,异步任务不具有堵塞效果。
任务队列和事件循环
任务队列:
js在运行时,除了正在运行的主线程还有一个任务队列,里面是各种需要当前程序处理的异步任务。
主线程会先执行所有的同步任务,同步任务执行完毕后会去任务队列里面的异步任务。如果满足条件,那么异步任务就重新进入主线程开始执行,这时它就变成同步任务了。等到执行完,下一个异步任务再进入主线程开始执行。一旦任务队列清空,程序就结束执行。
任务队列分为两种:宏任务队列和微任务队列宏任务是指主线程上的任务,它们会在主线程上执行。常见的宏任务包括 setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering 等。宏任务一般是与浏览器的渲染相关的任务。
微任务是指在主线程上执行的任务之前或之后立即执行的任务。常见的微任务包括 Promise.then, process.nextTick, Object.observe, MutationObserver 等。微任务一般是与 JavaScript 代码的执行相关的任务。
事件循环:
只要同步任务执行完后,引擎会去检索异步任务有没有结果、能不能进入主线程。一遍又一遍,这种循环检查的机制就叫做事件循环机制