程序、进程、线程
一、概述
程序: 存放在磁盘中的可执行文件,对于计算机来说它就是一系列的指令集合,是一个静态概念
进程: 程序的一次执行过程,是一个动态的概念,进程由进程控制块、程序段、数据段组成,它是操作系统进行资源分配的最小单位
程序控制块(PCB: Process Control Block)
- 进程描述信息: (进程标识符 pid、用户标识符 uid)
- 进程控制和管理信息: (CPU、磁盘、网络流量使用情况、进程运行状态)
- 资源分配清单: (正在使用的内存区域、正在使用的 IO 设备、正在使用的文件)
- 处理机相关信息: (程序状态字(PSW)、PC 等各种寄存器的值(用于进程切换))
程序段: 程序代码(一系列的指令序列)
数据段: 进程运行过程中产生和使用的各种数据
线程: 线程可以理解为轻量级进程,它是操作系统进行运算调度的最小单位
二、有了进程之后为什么还要再引入线程
- 线程是进行调度和运算的最小单位,引入了线程之后,不仅是进程与进程之间可以并发,同属与一个进程内的线程也可以发生并发,从而提高了系统的并发度
- 线程并发、创建、销毁、切换的开销相比于进程来说更低
- 进程间通信必须请求操作系统服务(CPU 需要从用户态切换到核心态),系统开销大,同进程下的所有线程共享该进程的资源,线程之间通信无需操作系统进行干预,开销更小
三、什么是线程的上下文切换
对于单核 CPU 而言,在某一个时刻只能运行一个线程,当 CPU 结束运行一个线程,转而去执行另外一个线程,这个过程就被称为线程上下文切换
以下是 Java 中常见的发生 CPU 上下文切换的场景
- 线程正常执行结束
- CPU 时间片用完
- 垃圾回收器进行垃圾回收
- 有更高优先级的线程加入
- 线程主动调用 sleep、wait、yield、join、synchronized、lock、park 等方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?