16.线程机制于事件循环

1.关于线程问题:

  • JS是单线程的,使用H5中的Web Worker可以多线程执行

  • 浏览器是多线程执行的。浏览器是多进程:chrome ,单进程:firefox

2.浏览器内核:

支撑浏览器最核心的程序

不同浏览器可能不一样

内核由很多模块组成:

3.主线程和分线程

主线程:

  • js引擎模块,负责js程序的编译于运行
  • htmlcss文档解析模块:负责页面文本的解析。将文本解析为一个个的节点。
  • DOM/CSS模块:负责dom/css在内存中的相关处理,最终将所有的节点都解析为一个个对象,根据相互之间的某种关系存储在内存中。
  • 布局和渲染模块:负责页面的布局和效果的绘制(内存中的对象)

分线程:

  • 定时器模块:负责定时器的管理
  • 事件响应模块:负责事件的管理
  • 网络请求模块:负责ajax请求

4.定时器是如何执行的?

定时器并不能保证真正定时执行,一般会延迟一丁点(可以接受),也可能延迟很长时间(不能接受)。

setTimeout()的回调函数是在主线程执行的,定时器回调函数只有在运行栈中全部代码执行完后才有可能执行。

5.为什么js要用单线程模式,而不用多线程模式?

作为浏览器的脚本语言,javaScript的主要作用是与用户交互,以及操作DOM。这就定了他只能是单线程,否则会带来很复杂的同步问题。

举个例子:如果有一个Dom对象,此时有两个线程对该对象分别要进行更新和删除操作,如果这时其中一个线程对对象进行了删除操作,然后紧接着线程切换到下一个,这时另一个线程对该对象要进行更新操作,显然是无法完成的。我们知道在java中常用多线程,可是这里的多线程是争对多个用户对象的,也就是说一个线程服务一个对象,所以这样就不会造成混乱。当然js中也可以实现多线程,但是这必须得保证,不能使多个线程对同一个对象进行操作。

6.代码的分类:

  1. 初始化代码(同步代码):包含绑定dom事件监听,设置定时器,发送ajax请求的代码2.回调代码(异步代码):处理回调逻辑。

  2. js执行引擎行代码的基本流程:先执行初始化代码===>回调代码

  3. .模型的2个重要组成部分:

    • 事件(定时器/DOM事件)管理模块。这些管理模块都是在分线程的。前面我们说js不是单线程的吗?怎么又来个分线程,切记:这里的分线程不是由js引擎所执行的,而是由浏览器执行的。

    • 回调队列。这个队列是上面的分线程执行任务完毕之后然后将回调函数放入了回调队列。

7.事件循环模型:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值