CPU
CPU就是中心处理器。cmd输入[systeminfo]命令查看当前物理CPU信息。
总体来说,物理CPU是实际存在的硬件处理器,虚拟CPU是在虚拟化环境中用于管理和分配处理器资源的抽象概念。
物理CPU
物理概念上: 一个电脑一般只有一个CPU,每个物理CPU通常包括一到多个处理核心,处理核心用来执行计算机程序中的指令。物理CPU的性能和规格(核心数量、时钟速度等)直接影响计算机的整体性能。
虚拟CPU
虚拟化环境中使用的概念,模拟了物理CPU的能力。一个物理CPU被切割成了多个虚拟CPU,每个虚拟CPU可以被分配给不同的虚拟机实例。
虚拟CPU在物理CPU上以时间片轮转的方式运行,可以实现多个虚拟机的并发执行,而虚拟CPU的数量和性能也会受到物理CPU的限制。
处理器内核
cmd窗口输入[wmic]后,输入cpu get NumberOfCores
获取物理核心数,cmd窗口输入[wmic]后,输入cpu get NumberOfLogicalProcessors
获取逻辑核心数。
总体来说,逻辑内核的存在可以提高处理器的线程并发性能,但不等同于物理内核,因为他们共享物理内核的资源。
物理内核
实际存在于处理器芯片中的处理核心。每个物理内核都有自己的执行单元和缓存,并能独立执行指令。通常说某台电脑是几核处理器就是几个物理核心。
逻辑内核
在物理内核基础上通过超线程技术实现的虚拟处理核心。超线程技术允许单个物理内核模拟出多个逻辑内核,使处理器能同时处理更多线程。每个逻辑内核有自己的执行单元和寄存器集合,但每个逻辑内核共享所依赖的物理内核的执行资源,如缓存和处理器功能单元。通常说某台电脑多少线程就有多少个逻辑内核。
比如某台电脑是8核16线程,就是8个物理内核和16个逻辑内核。
进程
进程就是正在进行中的程序的实例 。每个进程都有独立的内存空间,是CPU进行资源分配的基本单位(能拥有资源和独立运行的最小单位) 。
进程拥有独立的地址空间,进程间不会相互干扰,每个进程拥有一个或多个线程,这些线程共享相同的进程资源(比如内存空间和进程状态等)。
线程
是指进程内部的线程,而不是处理器的逻辑线程。
线程是进程内部的执行单元,是CPU进行调度执行的基本单位(建立在进程基础上的一次程序运行单位,也可以说是一条指令) 。而单线程和多线程的概念也指的是在同一进程内的单和多~
对于CPU内核(通常指处理器的物理内核)来说,没有进程线程的概念,只有正在执行的指令,同一个CPU内核一次只能执行一条指令,而这条指令就是进程概念下的线程。
浏览器的进程和线程
1、浏览器应用程序包含多个进程:
- 浏览器主进程(tab页的管理、网络请求(处理用户的导航行为和整个浏览器窗口的网络通信)、文件访问、地址栏、书签栏、前进后退按钮等的管理)
- GPU进程
- 插件进程
- 浏览器渲染进程(浏览器内核)
多进程能利用CPU的多核优势,同时避免单个页面崩溃和插件进程崩溃影响整个浏览器(多进程之间是互相独立的)。
2、浏览器内核
就是前端经常打交道的部分了,由多个线程组成:
- GUI渲染线程(解析HTML、CSS、构建DOM树和CSSOM树和Render树,布局和绘制等)
- JS引擎线程(JS内核,负责处理JS脚本程序),一个tab页面只有一个JS线程在运行JS程序,JS引擎线程与GUI渲染线程互斥
- 事件触发线程(属于浏览器而不属于JS引擎),主要控制事件循环,比如执行到setTimeout等定时器任务,鼠标点击、AJAX异步请求都会被添加到此线程,对应的事件符合触发条件被触发时,该线程会把事件添加到待处理队列(宏任务)的队尾排队等待JS引擎的处理
- 定时触发器线程(setTimeout、setInterval所在线程),因为JS引擎是单线程的,如果处在阻塞状态就会影响计时准确。通过此线程进行计时并触发定时器,计时完毕后添加到事件队列,等待JS引擎空闲执行
- 异步HTTP(AJAX)请求线程(负责处理页面内部的异步操作),异步线程的状态变更事件会触发回调,此回调会进入到事件队列(微任务队列),等待JS引擎执行
3、浏览器渲染进程中的线程和CPU的关系
各个线程在渲染进程中会根据需要进行动态调度和分配 CPU 资源,以实现页面的平滑渲染和快速响应用户操作的目标。
在多核 CPU 系统中,这些线程可以利用多个 CPU 核心进行并行执行,以提高整体的性能和响应速度。需要注意的是,并不是所有的线程都能够完全并行执行,一些线程可能会存在依赖关系或竞争条件,需要通过合适的调度策略来管理。