浏览器的进程和线程

news/2025/2/12 9:23:23/

浏览器是多进程多线程的应用程序

浏览器进程

主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。
网络进程
负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。
渲染进程
渲染进程启动后,会开启一个染主线程,主线程负责执行 HTML、CSS、JS 代码默认情况下,浏览器会为每个标签页开启一个新的渲染进程,以保证不同的标签页之间不相互影响。

线程

一个进程里面可以有多个线程
这里我们主要研究的是渲染进程
一个标签一个进程
在这里插入图片描述

js的事件循环

事件循环又叫做消息循环,是浏览器渲染主线程的工作方式。在Chrome 的源码中,它开启一个不会结束的 for 循环,每次循环从消息队列中取出第一个任务执行,而其他线程只需要在合适的时候将任务加入到队列末尾即可。过去把消息队列简单分为宏队列和微队列,这种说法目前已无法满足复杂的浏览器环境,取而代之的是一种更加灵活多变的处理方式。根据 W3C官方的解释,每个任务有不同的类型,同类型的任务必须在同一个队列,不同的任务可以属于不同的队列。不同任务队列有不同的优先级,在一次事件循环中,由浏览器自行决定取哪一个队列的任务。但浏览器必须有一个微队列,微队列的任务一定具有最高的优先级,必须优先调度执行。

JS 中的计时器能做到精确计时吗? 为什么?

不行,因为:
计算机硬件没有原子钟,无法做到精确计时
操作系统的计时函数本身就有代最偏差s JS 的计时器最终调用的是操作系统的函数,也就携带了这些偏差
按照 W3C的标准,浏览器实现计时器时,如果嵌套层级超过 5 层,则会带有 4 毫秒的最少时间,这样在计时时间少于4毫秒时又带来了偏差
受事件循环的影响,计时器的回调函数只能在主线程空闲时运行,因此又带来了偏差

如何理解js的异步

JS是一门单线程的语言,这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个并且渲染主线程承担着诸多的工作,渲染页面、执行 JS 都在其中运行。如果使用同步的方式,就极有可能导致主线程产生阻塞,从而导致消息队列中的很多其他任务无法得到执行。这样一来,一户面会导致繁忙的主线程白白的消耗时间,另一方面导致页面无法及时更新,给用户造成卡死现象。
所以浏览器采用异步的方式来避免。具体做法是当某些任务发生时,比如计时器、网络、事件监听,主线程将任务交给其他线程去处理,自身立即结束任务的执行,转而执行后续代码。当其他线程完成时,将事先传递的回调函数包装成任务,加入到消息队列的末尾排队,等待主线程调度执行。在这种异步模式下,浏览器永不阻塞,从而最大限度的保证了单线程的流畅运行。


http://www.ppmy.cn/news/74065.html

相关文章

无公网IP,SSH远程连接Linux CentOS

转载自cpolar内网穿透的文章:无公网IP,SSH远程连接Linux CentOS【内网穿透】 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。 视频教程 【SSH远程…

整除分块学习笔记

整除分块学习笔记 文章目录 整除分块学习笔记前言整除分块code后记 前言 最近在学习 莫比乌斯反演 ,好像要用到一个小小的知识点: 整除分块 所以为了让大家都能更好地学习莫比乌斯反演,我来水一篇博客 那么正片开始。 整除分块 现在要求…

【利用AI刷面试题】AI:十道Vue面试题巩固一下知识

文章目录 1. 你在Vue中遇到过哪些性能问题?如何优化这些性能问题?2. Vue生命周期钩子函数有哪些?在什么情况下使用它们?3. Vue组件通信方式有哪些?它们各自适用于哪些场景?4. 你了解diff算法吗?…

字符串按规则生成字典

带数字的字符串以数字为key倒序生成字典,字符串列表按其元素索引为key倒序生成字典。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简…

Codeforces Round 860 (Div. 2)

A Showstopper 题意:给你两个长度为n的数组a和b,每次操作你可以互换a[i]与b[i],问最终能否满足 思路:若a[i]>b[i],我们就进行操作。这样数组b元素都是较大的, 一定比不操作更优。最后判断是否满足条件…

java设计模式之过滤器设计模式的前世今生

过滤器设计模式是什么? 过滤器设计模式(Filter Design Pattern)是一种结构设计模式,它将一组对象或数据根据一定的条件进行筛选过滤。过滤器模式可以通过链式过滤器来逐步筛选出符合条件的对象或数据。 过滤器模式通常包括以下组…

MQTT入门手册

初识MQTT MQTT 协议简介 概览 MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网…

ubuntu1804替换系统的cups后,启动cups时报错 undefined symbol:_cupsMessageSave。。。

开发环境: Ubuntu18.04 cups-2.2.7 最终要将cups-2.2.7替换为cups-.2.3.3 好,在编译完cups后,对系统的cups进行替换,,此操作已完成。。。。 接下来,启动cups,发现启动失败。。 紧接着执行 jo…