zoukankan      html  css  js  c++  java
  • 浏览器工作原理(三):js运行机制及Event Loop

    参考:https://segmentfault.com/a/1190000012925872#articleHeader4

    一、为什么有Event Loop

    Javascript设计之初就是一门单线程语言,Event Loop就是为了解决主线程不阻塞的问题。

    二、Event Loop流程

    1、js中有同步任务、异步任务两种

    2、同步任务在JS引擎线程执行,形成执行栈

    3、异步任务在已有异步操作结果符合触发条件时,进入任务队列(由事件触发线程管理)等待执行

    4、执行栈中的任务运行完成后(JS引擎空闲),从任务队列中读取任务,加入到执行栈,并执行

    三、图解流程、数据结构、与浏览器各线程之间关系

     四、定时器

    1、定时器是独立线程控制:

    定时触发是由定时器线程控制的,这是因为JavaScript引擎是单线程的, 如果处于阻塞线程状态就会影响记计时的准确,因此很有必要单独开一个线程用来计时。

    2、定时器实现流程

    定时器实现在预先设定的时间后,将事件推入任务队列,等待执行栈执行。由于定时事件在推入任务队列中时,JS引擎线程正在执行其他任务,这时要定时事件要等待JS引擎线程空闲才能执行,就可能出现定时事件不能准时执行

    3、对于0毫秒的定时:

    W3C在HTML标准中规定,规定要求setTimeout中低于4ms的时间间隔算为4ms,但不排除不同浏览器最小事件设置不同。

    即便时间间隔为0也需要进入任务队列等待JS引擎线程空闲的过程,执行栈中的任务还是早于定时任务执行

  • 相关阅读:
    1104.整除问题
    1101.表达式求值(难)
    1102.最小子面积矩阵
    1095.2的幂次方
    1094.String matching
    1093.WERTYU
    1096.日期差值
    1092.Fibonacci
    车站解题程序
    阶乘之和解题程序
  • 原文地址:https://www.cnblogs.com/zs-note/p/9633124.html
Copyright © 2011-2022 走看看