一,基本概念
进程是操作系统资源分配的基本单位,拥有独立的内存空间、文件描述符、环境变量等。每个进程运行在独立的地址空间,互相隔离,稳定性高但开销大。
说明:创建进程时,操作系统需要为其分配独立的内存空间、建立页表、初始化数据段等。
线程是CPU调度的基本单位,属于同一进程的多个线程共享进程的资源(如内存、文件句柄)。线程切换开销小,但缺乏隔离性,一个线程崩溃可能导致整个进程终止。
说明:线程共享进程的绝大部分资源(内存、文件等) ,只需要分配一个独立的栈空间和设置线程控制块
二,进程
在计算机的任务管理器中,分别为后台进程和应用程序进程,应用程序进程也是我们所说的APP。
编辑
1,应用程序的构成
应用程序本质上由指令和数据构成, 例如,一个.exe文件在Windows系统中以PE格式存储二进制指令”。当程序未被运行时,它们以二进制代码的形式存储在磁盘上。一旦启动运行,指令会被加载到CPU执行,而数据则被载入内存(如RAM)供CPU读写访问。
如下,在window的安装后的微信应用程序:
2,启动.EXE入口

编辑
3,二进制代码
编辑
三,线程
线程是CPU调度的最小单位,线程必须依赖于进程而存在,线程是进程中的一个实体,是CPU调度和分派的基本单位,它是比进程更小的、能独立运行的基本单位。
线程仅持有少量独立资源(如程序计数器、寄存器、栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个进程可以拥有多个线程,一个线程必须有一个父进程。
比如在IDEA中,我们启动nl-app的线程。
public class App {
public static void main(String[] args) {
while (true) {
try {
System.out.println(System.currentTimeMillis() + "Hello World!");
Thread.sleep(5000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
效果如下,在IDEA应用出现一个nl-app线程
编辑
四,进程和线程区别
- 进程之间相互独立,各自的运行;线程则隶属于进程,是进程的执行子集,一个进程可包含多个线程。
- 进程拥有共享的资源,如内存空间等,供其内部的线程共享
- 线程通信相对简单,因为它们共享进程内的内存,一个例子是多个线程可以访问同一个共享变量
- 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低
五,CPU核心数和线程数的关系
CPU是线程调度的最小单位,一个CPU的核心只能运行一个线程。但是查看任务管理器的时候,正在运行的进程数和线程远远大于系统的CPU核心数,为什么系统时不出现卡顿呢?
编辑
这个时候,我们就需要了解下并发和并行。
六,并行和并发
1,并发
指的是单CPU核心下能执行多线程,并非是同时执行多个任务。如单核CPU通过多线程技术,在单核系统中运行多个线程时,CPU会通过快速切换执行上下文来交替处理不同线程的任务,达到同时执行的效果,由于切换速度极快(通常在毫秒级别)
重要提示:这种交替执行在用户感知上就像是同时进行的,这本质上是一种时间片轮转的调度机制,而非真正的同步执行
2,并行
指应用程序能够同时处理多个任务。在多核CPU架构中,每个核心都能独立运行线程,从而实现真正的并行任务处理。
例如:一边走路一边打电话,这些操作是同步进行的
3,并发和并行的区别
并发是交替执行,并行是同时执行
4,适用场景
4.1,I/O密集型场景
I/O密集型任务主要时间消耗在等待I/O操作(如磁盘、网络)完成,CPU利用率低。
| 类型 | 原因 |
| 并发优势 | 通过任务切换,在等待I/O时执行其他任务,提高CPU利用率。例如Web服务器处理大量请求时,单线程事件循环(如Node.js)或协程(如Go的goroutine)可高效管理I/O等待 |
| 并行限制 | 增加线程/进程数可能因I/O设备瓶颈(如磁盘带宽)导致收益递减,甚至因线程切换开销降低性能 |
4.2,计算密集型场景
计算密集型任务需要持续占用CPU进行计算,如数值模拟、图像处理。
| 类型 | 原因 |
| 并行优势 | 将任务拆分到多核/多机并行计算,直接缩短总耗时。例如使用MPI进行分布式计算或CUDA加速矩阵运算。 |
| 并发限制 | 单核上并发无法提升性能,任务切换反而增加开销。需避免伪并发(如Python的GIL限制多线程并行计算) |
七,总结
进程和线程都是计算机不可或缺的存在,是存在互补的,有以下关键点:
| 特性 | 进程 | 线程 |
| 基本单位 | 资源分配和拥有的独立单位 | 程序执行和调度的基本单位 |
| 开销 | 创建/销毁/切换开销大 | 创建/销毁/切换开销小 |
| 内存/资源 | 地址空间独立,资源隔离 | 共享进程的地址空间和大部分资源 |
| 通信 | 必须使用复杂、缓慢的IPC机制 | 可直接、快速读写共享内存,但需同步 |
| 并发性 | 进程间并发,上下文切换成本高 | 线程间并发,切换成本低,能更好利用多核 |
| 健壮性 | 一个进程崩溃不影响其他进程 | 一个线程崩溃可能导致整个进程崩溃 |