沙河市建设局网站,驻马店百牛网站建设,为什么用html5做网站,微信小程序视频网站开发教程进程与线程
进程
进程的概念 进程是操作系统中的一个程序或者一个程序的一次执行过程#xff0c;是一个动态的概念#xff0c;是程序在执行过程中分配和管理资源的基本单位#xff0c;是操作系统结构的基础。 简单的来说#xff0c;就是一个程序运行开辟的一块内存空间是一个动态的概念是程序在执行过程中分配和管理资源的基本单位是操作系统结构的基础。 简单的来说就是一个程序运行开辟的一块内存空间值得注意的是一个程序至少有一个进程进程之间是相互独立的。
线程
线程的概念 线程是进程中的一个实体是被系统独立调度和分派的基本单位是比进程更小的能独立运行的基本单位。 简单的来说就是执行程序的通道一个进程至少有一个线程在进程开启后自动创建一个线程这个线程称为主线程线程之间是共享进程的内存空间的。
浏览器进程与线程
浏览器是一个多进程多线程的应用程序
这是因为浏览器防止连环崩坏避免相互影响其中重要的进程有浏览器进程、渲染进程、网络进程等。
每个标签页都是一个渲染进程每个进程都是独立的互不影响所以当一个标签页崩溃时不会影响其他标签页。
注现在浏览器的渲染进程改变了不再是一个标签一个进程转换为相同站点为一个进程 时间2023/10/25 浏览器进程
主要负责界面显示标签、前进、后退、导航栏等、用户交互、子进程管理网络、渲染进程等、提供存储等功能。内部会启动多个线程处理不同的任务。
网络进程
负责网络加载资源主要是通过网络请求获取数据然后传递给渲染进程。内部会启动多个线程处理不同的任务。
渲染进程
渲染进程启动后会开启一个渲染主线程负责执行 HTML、CSS、JavaScript。
渲染主线程
渲染主线程负责
解析 HTML生成 DOM 树解析 CSS生成 CSSOM 树计算样式布局处理图层每秒把页面渲染到屏幕上 60 次不同的设备刷新率不同执行全局JS代码执行事件处理函数执行计时器的回调函数… 为什么渲染进程不适合多个线程 如果渲染进程有多个线程那么多个线程会共享渲染进程的内存空间这样会导致多个线程之间相互影响造成页面崩溃。
浏览器事件循环
在渲染主进程中的多个任务执行如何做到任务调度 排队执行
任务队列
任务队列是一个先进先出的队列用来存储将要执行的任务渲染主线程从任务队列拿任务执行。 渲染主线程流程 进入无限循环不断从任务队列中取出任务执行每次检查任务队列是否有任务如果有就取出任务执行没有就等待任务加入任务队列其他线程的任务可随时加入任务队列末尾
异步任务
代码在执行过程中会遇到一些无法立即处理的任务比如
计时完成后需要执行的任务setTimeout、setInterval网络通讯完成后需要执行的任务XHR、Fetch用户操作后需要执行的任务addEvaentListener
如果让渲染主线程等待这些任务的执行将会导致主线程长期处于阻塞状态导致浏览器奔溃 这里使用异步的方式保证主线程不阻塞 如何理解 JS 的异步 JS是一门单线程的语言因为JS执行在渲染主线程中为了防止渲染主线程的阻塞采用异步的方式碰到耗时任务时交给其他线程处理自生立即结束当前任务执行后续任务而耗时任务的回调函数包装成任务加到任务队列中末尾等待调度执行
任务优先级
任务没有优先级但是任务队列是有优先级的
每个任务都有一个任务类型同一个类型的任务必须在同一个队列不同类型的任务可分属于不同的队列也可以将两种或多种类型的任务放在同一个队列 在一次事件循环中浏览器可以根据实际情况从不同的队列中取出任务执行浏览器必须有一个微任务队列优先执行微任务队列里的任务
在 chrome 中至少包含以下队列
延时队列用于存放计时器的回调任务优先级》中交互队列用于存放用户操作后产生的事件处理任务优先级》高微队列用于存放需要最快执行的任务优先级》最高
添加微队列的方式主要包括Promise、MutationObserver