浏览器进程、线程、线程池解释及使用

浏览器进程和线程 两个定时器简介setTimeout(fn,定时时间(ms));【延迟加载】 clearTimeout(定时器名称);一次性定时器setInterval(fn,定时时间(ms));【一段时间后刷新表单】 clearInterval(定时器名称)循环定时器定时器是怎么执行的呢?(为什么一定的时间后就执行里面的代码呢?)(1)js是单线程的(浏览器中叫js引擎);(2)js执行到定时器函数的时候... 阅读详情

一图胜千言 

进程

进程是cpu资源分配的最小单位(是能拥有资源和独立运行的最小单位)

一个进程就是一个程序的运行实例。详细解释就是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。 

线程

线程是cpu调度的最小单位(线程是建立在进程的基础上的一次程序运行单位)

线程是不能单独存在的,它是由进程来启动和管理的。

两者关系

  1. 计算机资源独立分配到各个进程,进程之间 互相独立(可以通信,但是代价较大)

  2. 一个进程由一个或多个线程组成,是包含关系

  3. 同一进程下的各个线程之间共享程序的内存空间

  4. 不同进程之间也可以通信,不过代价较大

在浏览器中打开一个网页相当于新起了一个进程(进程内有自己的多线程)

线程池

线程池是一种用于管理线程的集合,以提高内存和CPU效率。它通过一次性创建一定数量的线程,并当有新的请求到来时,直接使用已创建的线程来处理请求,从而避免了频繁地创建和销毁线程的开销。线程池中的线程可以被多个请求共享,因此可以更有效地利用系统资源。

使用浏览器线程池

浏览器并没有提供直接的线程池接口。浏览器主要使用事件循环模型来处理异步任务,而不是直接使用线程池。事件循环模型将任务分为宏任务和微任务,宏任务包括脚本整体(整体代码script)、setTimeout、setInterval、setImmediate、I/O、UI渲染,微任务包括Promise.then/catch/finally、MutationObserver、process.nextTick(Node.js环境)。

在JavaScript中,虽然无法直接使用线程池,但可以使用Web Workers API来创建在后台线程中运行的任务,其不能操作DOM。Web Workers允许你在浏览器中创建多个线程,以便执行复杂的任务而不影响页面的性能。注意:这依然不能改变js是单线程的事实。

// 创建一个新的Worker对象,并传递要运行的脚本文件的URL:
var worker = new Worker('script.js');

// 通过postMessage()方法向后台线程发送数据:
worker.postMessage('Hello, worker!');

// 在后台线程中处理发送过来的数据:
self.onmessage = function(event) {  
  console.log('Worker received: ', event.data);  
  // 执行后台线程中的任务  
  // ...  
  // 发送结果回主线程  
  postMessage('Done!');  
};

// 在主线程中接收后台线程的响应:
worker.onmessage = function(event) {  
  console.log('Main thread received result: ', event.data);  
};

MutationObserver

MutationObserver 是一个用于监视DOM树变化的接口。当DOM树中的任何变动,比如节点的增减、属性的变动、文本内容的变动等发生时,MutationObserver 都会触发相应的回调函数。与事件触发不同,MutationObserver 是异步触发的,DOM的变动并不会立刻触发,而是要等到当前所有DOM操作都结束才触发。

使用 MutationObserver 时,需要创建一个新的实例,然后传入一个回调函数。当DOM发生变化时,这个回调函数就会被调用。回调函数接受两个参数:一个是 MutationObserverEvent 对象,另一个是 MutationObserver。

MutationObserver 有以下特点:

  1. 它等待所有脚本任务完成后,才会运行(即异步触发方式)(微任务)。
  2. 它把 DOM 变动记录封装成一个数组进行处理,而不是一条条个别处理 DOM 变动。
  3. 它既可以观察 DOM 的所有类型变动,也可以指定只观察某一类变动。

总之,MutationObserver 是一个允许我们异步观察DOM变动的接口,当DOM发生任何变动时,它都可以触发我们提供的回调函数。

// 创建一个新的MutationObserver实例  
var observer = new MutationObserver(function(mutations) {  
  // 回调函数  
  mutations.forEach(function(mutation) {  
    console.log(mutation);  
  });  
});  
  
// 配置观察选项  
var config = { attributes: true, childList: true, subtree: true };  
  
// 指定要观察的DOM元素  
var targetNode = document.getElementById('someElementId');  
  
// 开始观察DOM元素  
observer.observe(targetNode, config);  
  
// 停止观察DOM元素  
// observer.disconnect();

网络线程

浏览器会为每个页面创建一个独立的渲染线程,但网络线程是公用的。这意味着多个页面可以共享同一个网络线程来处理网络请求。

这种设计可以充分利用多核CPU的性能,同时减少线程的创建和销毁开销。通过共享网络线程,浏览器可以更高效地处理多个页面的网络请求,提高网页的加载速度和性能。

浏览器网络线程针对不同源的网站一般不会共用。每个源(即域名)通常会有自己的网络线程。当浏览器访问不同源的网站时,会为每个源创建一个独立的网络线程,以确保请求的独立性和安全性。

需要注意的是,具体的实现方式可能会因浏览器类型和版本而有所不同。因此,具体的网络线程共享策略可能会有所差异。

浏览器连接池

浏览器连接池是一种技术,它允许在浏览器中创建和管理HTTP连接的集合,以提高网络性能和加载速度。

浏览器连接池的主要目的是重用HTTP连接,以减少创建和关闭连接的开销。当浏览器需要发送HTTP请求时,它可以从连接池中获取一个可用的连接,而不是每次请求都重新建立一个新的连接。这种重用连接的方式可以降低网络延迟和提高页面加载速度。

连接池中的连接可以被多个请求共享,因此可以更有效地利用系统资源。此外,连接池还可以根据需要进行扩展和收缩,以适应不同的网络环境和请求负载。

浏览器连接池通常与HTTP/1.1的持久连接(也称为长连接)一起使用。持久连接允许在同一个TCP连接上发送多个HTTP请求和响应,而不需要为每个请求重新建立连接。这可以减少握手和挥手的时间开销,并提高网络效率。

需要注意的是,浏览器连接池可能并不适用于所有情况。例如,当与不同的服务器进行通信时,可能需要为每个服务器建立单独的连接池。此外,在某些情况下,使用过多的连接池可能会导致系统资源的浪费和性能下降。因此,在使用浏览器连接池时需要根据具体情况进行权衡和优化。

下面是一个简单的示例代码,演示如何使用浏览器连接池:

import java.net.http.HttpClient;  
import java.net.http.HttpRequest;  
import java.net.http.HttpResponse;  
  
public class BrowserConnectionPoolExample {  
    public static void main(String[] args) {  
        // 创建连接池  
        HttpClient client = HttpClient.newBuilder()  
                .version(HttpClient.Version.HTTP_2)  
                .executor(executor) // executor实例,用于执行请求  
                .connectTimeout(Duration.ofSeconds(10)) // 连接超时时间  
                .build(); // 创建HttpClient实例  
          
        // 提交请求给连接池  
        HttpRequest request = HttpRequest.newBuilder()  
                .uri(URI.create("http://example.com")) // 设置请求的URI  
                .build(); // 创建HttpRequest实例  
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); // 使用连接池发送请求并获取响应  
          
        // 处理响应  
        System.out.println(response.body());  
    }  
}

可以看看这篇文章  一文看懂Chrome浏览器运行机制 - 知乎

【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包 激光雷达和相机联合标定(一)——ROS同步解包 阅读详情

相关推荐

CSP-J 复试考点

可以用来训练思维,对于学习时间短的同学,动态规划可以帮助你迅速进入编程状态,也有助于帮你发现题目背后可能隐藏的更简便的算法。动态规划、贪心都是和子问题相关的,动态规划的基本思想是将一个大的问题划分成子问题,接着分别求解,而且能够将一些重复的计算记忆化,大大提高效率。难度加大,会涉及到二分、动态规划之类的算法,容易遗漏考虑点,不易得全分,考试的时候要注意全面性。一般是压轴题,算法不明显,剪枝的搜索、动态规划、状压 DP、树形 DP 、树、图等。枚举算法是指,列举出所有可能的取值,从中找出最优解。

GuanHeTian的博客 2214

浏览器线程

1.浏览器线程 1.JS引擎线程 JS内核,也称JS引擎,负责处理执行javascript脚本。这是JS中的主线程,所以JS是单线程的编程语言,但是实际上JS属于单线程异步。异步是由子线程进行完成,主线程负责调度子线程。所以JS不严格的说也也属于多线程的编程语言 与GUI线程是互斥 2.GUI渲染线程 负责渲染浏览器界面,包括解析HTML、CSS、构建DOM树、Render树、布局与绘制等 当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行 与JS主线程互斥 3.事件监

m0_47720236的博客 1793

001-基础入门-Web演示源码&资源&工具箱等

小迪安全2023笔记

wushangyu32335的博客 4257

深入浏览器之浏览器中的进程与线程

深入浏览器之浏览器中的进程与线程

weixin_52140964的博客 2464

思澈sdk-新建lcd

co5300至此有3个同ID的驱动,在co5300xxxx.c的LCD_DRIVER_EXPORT(co5300, LCD_ID, &lcdc_int_cfg, &CO5300_drv, LCD_PIXEL_WIDTH, LCD_PIXEL_HEIGHT, 2);2 在customer\peripherals\Kconfig_lcd中添加如下配置(注意修改的地方有两个LCD_USING_TFT_CO5300_143)5 在该文件中的config LCD_DPI配置项下添加:(这里300为DPI)

gongyuan073的专栏 1380

Palantir的Ontology:从静态知识图谱到动态业务引擎的跃迁

本文探讨了Palantir的Ontology技术如何将静态知识图谱升级为动态业务引擎。通过引入函数和行动作为核心元素,Ontology实现了业务逻辑的自动化响应与执行,显著提升物流、能源等领域的运营效率。文章详细解析了其混合存储引擎、状态监听网络等关键技术设计,并对比展示了传统架构与Ontology架构的业务价值差异。

weixin_42570296的博客 200

浏览器的线程有哪些

XMLHttpRequest在连接后,浏览器会新开一个线程请求,等检测到请求状态改变后,将对应执行函数推入执行栈中,等待JS引擎线程执行。负责计时,等setInterval、setTimeout等待时间结束后,将执行函数推入执行栈。负责渲染HTML、CSS,二维视图,三维视图,GUI内部的线程是多线程。如click、resize等事件触发后,将触发后的执行函数,推入执行栈。负责执行执行栈最顶端的JS代码,与GUI线程互斥。

一些coding知识记录 1115

从零开始安装pytorch(包含GPU和CPU版本的安装)

Pytorch是。

qiaoxinyu1989的博客 8万+

四、浏览器进程与线程

现代浏览器为了提高性能和安全性,采用了多进程和多线程的架构。进程和线程是操作系统的基本概念,浏览器利用这些概念来管理和优化资源的使用。本文将简要介绍浏览器的进程和线程模型,以及它们在浏览器中的具体应用。

weixin_45511682的博客 2169

Isaac Lab 强化学习全身控制策略 Sim2Real 宇树人形机器人训练部署 HOVER

《IsaacLab策略训练与部署指南》提供了在仿真和真实机器人上实现HOVER全身控制策略的完整流程。主要内容包括:1) Linux环境下的IsaacLab安装与HOVER资源库配置;2) 使用1024个并行环境训练教师/学生策略的详细步骤;3) 策略测试与评估方法;4) Sim2Sim仿真验证和Sim2Real真实机器人部署方案。本教程特别针对Unitree H1仿人机器人,包含运动数据准备、策略训练、性能评估到硬件部署的全链条实现方案,为机器人控制策略开发提供标准化参考框架。

机器人控制与仿真应用 3068

华为OD机试 - 敌情监控 - 滑动窗口(Java 双机位C卷 200分)

说明 第一行第一个正整数5,表示敌人有5个营地,第二个正整数2,表示连续营地 的数量是2, 第3个正整数3, 表示后续会有3条查询的命令;接下来一行有 5个正整数,分别表示每个营地里开始的人的数,第1个营地开始有1个人,第 2个营地开始有2个人,第3个营地开始有2个人,第4个营地开始有3个人,第 5 个营地开始有3个人;第3条命令:Query 2 4 表示查询第2到第4个营地的总人数,结果:2+8=10 第一个输出是: 10,注意这里第3个营地人数在第2条命令中增加了6。第一行3个正整数:N K L。

学Java,找哪吒 764

多线程,线程池,线程的创建,线程池的参数

​ 进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位。线程也被称为轻量级进程,线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其它线程共享该进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

weixin_44797327的博客 1301

关于 Nginx 监听地址 0.0.0.0 的详细解释

0.0.0.0在Nginx配置中表示监听服务器所有网络接口(包括公网IP、内网IP和本地回环地址),这是默认配置。当使用listen 80;时,Nginx会接受通过服务器任何IP地址的80端口访问请求。相比只监听特定IP,这种配置更通用,但也意味着服务会对外网开放,需注意安全风险。可通过netstat命令验证监听状态,显示0.0.0.0:80即表示正确配置。

weixin_43674738的博客 1563

Java的线程池的好处、新建进程池的方法; 线程池满了,往线程池里提交任务会发生什么样的情况,具体分几种情况

Java的线程池的好处 进程-线程的简单介绍 进程 进程是计算机中的程序关于某数据集合的一次运行活动,是系统进行资源分配的调度的基本单位,是操作系统结构的基础。简单来讲:进程是指运行中的应用程序,进程是一个实体,每一个进程都有它自己的地址空间。例如我们点击了QQ,就启动了一个进程,操作系统就会为这个进程分配独立的地址空间,当我们又点击浏览器,这样又启动了一个进程,操作系统将为新的进程分配新的独...

rootkiss的博客 4788

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

浏览器进程、线程、消息队列、事件循环、异步

进程是操作系统分配资源(如内存、CPU时间)的基本单位。它代表一个正在运行的程序实例。例如,启动一个应用程序(如浏览器),操作系统会为其创建一个进程。每个进程都有自己独立的内存空间和资源,这样不同进程之间不会相互干扰。每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。

weixin_45287194的博客 1923

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java中的线程池有哪些,分别有什么作用?

阅读完本篇文章会知道如下三点: 1.进程-线程简单介绍 2.java的线程池是什么,有哪些类型,作用分别是什么 3.使用线程池的优点 1.进程-线程的简单介绍 进程 什么是进程呢? 进程是计算机中的程序关于某数据集合的一次运行活动,是系统进行资源分配的调度的基本单位,是操作系统结构的基础。简单来讲:进程是指运行中的应用程序,进程是一个实体,每一个进程都有它自己的地址空间。例如我...

深红骑士的博客 4万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java核心基础六:多线程、线程和线程池

进程和线程的区别、线程的生命周期、线程池原理和实现、线程池使用场景和优点、工作原理以及面试重点

Xyuan的博客 968

线程池详细说明

线程池万字详解

qq_45675973的博客 1555

深入理解多线程和线程池?

1、什么是线程? 在理解线程前,要先理解什么是进程; 【1】那么,什么是进程呢? 进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间。当用户再次点击左面的IE浏览器,又启动了一个进程,操作系统将为新的进程分配新的独立的地址空间。目前操作系统都支持多进程。 要点,用户每启动一个进程,...

喜欢历史的码农 4521

线程、线程池、异步

线程 Thread 是计算机执行的最小单位,是 进程 内的一个实体,可以被操作系统独立调用和执行线程可以理解为进程内的“程序执行流”,一个进程可以包含多个线程,所有线程共享该进程的资源,但每个线程都有自己的执行堆栈和程序计数器多线程可以并行执行在浏览器环境(多线程)中,JS (单线程)通常运行在 主线程(UI线程)上,浏览器还有渲染线程、网络线程、Web Worker 线程(允许JS在后台运行不阻塞UI)一般浏览器的多 进程 架构:1.浏览器主进程:负责UI交互、子进程管理等等。

2301_78856868的博客 1072

线程池使用规则

Java的线程池的好处 进程-线程的简单介绍 进程 进程是计算机中的程序关于某数据集合的一次运行活动,是系统进行资源分配的调度的基本单位,是操作系统结构的基础。简单来讲:进程是指运行中的应用程序,进程是一个实体,每一个进程都有它自己的地址空间。例如我们点击了QQ,就启动了一个进程,操作系统就会为这个进程分配独立的地址空间,当我们又点击浏览器,这样又启动了一个进程,操作系统将为新的进程分配新的独立的地址空间。 线程 线程是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实

zhuxue_的博客 598

Java基础27,28(多线程,ThreadMethod ,线程安全问题,线程状态,线程池)

现代操作系统(Windows,macOS,Linux)都可以执行多任务。多任务就是同时运行多个任务。例如:播放音乐的同时,浏览器可以进行文件下载,同时可以进行QQ消息的收发。CPU执行代码都是一条一条顺序执行的,但是,即使是单核CPU,也可以同时运行多个任务。因为操作系统执行多任务实际上就是让CPU对多个任务轮流交替执行。操作系统轮流让多个任务交替执行,例如,让浏览器执行0.001秒,让QQ执行0.001秒,再让音乐播放器执行0.001秒。在用户使用的体验看来,CPU就是在同时执行多个任务。

qq_52897007的博客 2773

线程的理解、进程和线程、线程的创建、线程安全和线程池(JAVA基础十三)

讲解线程的理解;线程和进程的概念、并发和并行的概念;创建线程的两种方法;线程的状态;线程安全、死锁;线程通信,线程池;Lock接口和线程安全集合。

Java.L的博客 631

【JAVA】线程与线程池

Java线程池 知多少,优秀博文转载

程序员Sharry的博客 1256

Python 进程池与线程池

前边套接字通信服务端多任务并发,套接字通信是I/O密集型的任务,用多线程。主线程建连接,每建一个连接就起一个线程。 彼此任务不再影响。 但这种方式会有服务端无限开线程的问题。所以要限制并发的个数,使用pool的概念。 开线程池,池的大小设置:设为机器可以承受的范围。线程池是一种折中的方案,其实比不开池效率低,但保证了安全机器不会崩。线程池应用于问题规模大,要开许多线程,多到机器无法承受的...

sdau_clt的博客 270

【JavaEE】线程案例-定时器-线程池 and 工厂模式

在本文章中,我详细讲解了多线程的案例,定时器,线程池,包括一些面试常问到的细节!并且讲解的设计模式的一种:工厂模式,并且举了一个一举两得的例子~。本文章结束了多线程初阶,敬请期待多线程进阶吧!

Carefree_State的博客 3266
上一篇: 数据存储格式
下一篇: 弱缓存变强缓存的原因
jsPao
博客等级 码龄7年 549粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值