2021.7.8 浏览器中的进程与线程

本文探讨了浏览器中的多线程机制,重点解释了JS的单线程特性和异步操作执行过程。浏览器拥有GUI渲染线程、JS引擎线程、事件触发线程、定时器触发线程和异步HTTP请求线程等。尽管JS是单线程,但通过EventLoop事件循环机制,结合微任务和宏任务,实现了异步编程,允许在主线程执行完同步任务后处理异步任务。
摘要由CSDN通过智能技术生成

进程: 一个程序(浏览器打开一个页面就是开辟一个进程)
线程: 程序中具体做事情的

一个进程中会包含一个或多个线程

浏览器是多线程的

包括:

  • GUI渲染线程:用于渲染页面
  • JS引擎线程:用于渲染和解析JS
  • 事件触发线程:监听DOM事件触发
  • 定时器触发线程:监听定时器是否到时间
  • 异步HTTP请求线程:从服务器端获取资源/数据的
  • WebWorker
  • ……

利用多线程是可以实现“异步编程”的:同时做多件事情
“同步编程”:单线程,一次只能处理一件事情,这件事情完成,才能继续处理后面的事情

JS是单线程的

JS是单线程的,因为浏览器只会分配一个“JS引擎线程”去渲染JS

  • JS中大部分操作都是同步的
  • 但是JS中也一定会有一些异步的操作代码

JS中执行异步操作的过程

JS引擎中分为主线程(ECStack)和WebAPI任务监听队列(监听异步任务是否可以执行),代码在主线程中按顺序执行,当遇到异步任务时,将任务加入到WebAPI中进行监听,如果监听到异步任务可以执行时,将异步任务加入到EventQueue(任务等待队列)中。
EventQueue分为“微任务”和“宏任务”两个部分,相应的任务加入到相应的队列中。
JS中的微任务:

  • requestAnimationFrame(有争议)
  • Promise.then/catch/finally
  • async/await
  • queueMicrotask
  • process.nextTick[node]
  • Mutation.Observer
  • IntersectionObserver
  • ……

JS中的宏任务:

  • setTimeout/setInterval
  • 事件绑定/队列
  • XMLHttpRequest/Fetch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值