一文搞懂计算机的CPU核心、进程和线程

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 核心进行并行执行,以提高整体的性能和响应速度。需要注意的是,并不是所有的线程都能够完全并行执行,一些线程可能会存在依赖关系或竞争条件,需要通过合适的调度策略来管理。

相关推荐
腾讯TNTWeb前端团队5 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰8 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪9 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪9 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy9 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom10 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom10 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom10 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom10 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom10 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试