这是一个常见的面试题,先说这个问题的结论:
进程和线程的区别与联系?
- 进程中包含线程,一个进程中至少有一个线程,即主线程;
- 进程是系统分配资源的最小单位,线程是 CPU 调度的最小单位;
- 线程之间共享进程申请的系统资源;
- 线程之间可以相互影响,一个线程出现问题可能导致整个进程崩溃,进程之间不受影响;
1. 通过一个简单的场景理解进程和线程的关系
假设张三要开一个工厂,需要做以下事情:
序号 | 需要做的事情 | 成本 |
---|---|---|
1 | 在工业园区申请一块地皮 | 几个月时间,几十万块钱 |
2 | 建厂 | 一个月时间,几十万块钱 |
3 | 建生产线 | 两周时间,几十万块钱 |
4 | 招人,买材料 | 一天时间,十万块钱 |
5 | 开工生产 | 产生利润 |
通过一张图来帮助我们理解进程和线程之间的关系,务必认真体会理解:
图中:
- 工业园区相当于操作系统
- 工业园区给你分配了一块地皮,就相当于操作系统给你分配的资源;
- 张三开的工厂就相当于一个进程
- 工厂就相当于在操作系统上申请的一个进程;
- 在工业园区中,工厂就是生产的最小单位;类比到操作系统中,进程就是系统分配资源的最小单位;
- 生产线就相当于一个线程;
- 工厂中有生产线,即进程中包含线程;
- 要生产出产品,工厂内至少需要一个生产线;类比到进程中,创建出一个进程至少包含一个线程,这个线程就叫做主线程;
- 由于要扩大生产,可以新开一个工厂,也可以增加生产线,显然,最划算的方法就是增加生产线,生产线都共同使用着工厂的电量、材料等资源;类比线程中的线程之间共享进程申请的资源;
- 生产线是生产产品的最小单位,因此线程是 CPU 调度的最小单位;
- 当一个生产线崩溃时,可能导致工厂的电路损坏,可能导致其他生产线崩溃,进而导致工厂停止运转;类比到线程中,线程之间可以相互影响,一个线程出现问题可能导致整个进程崩溃,进程之间不受影响;
- 开工生产就相当于线程的任务;
- 工厂和工厂之间互不干扰,类比到进程中,进程和进程之间,涉及的各种资源彼此之间不受影响,进程之间是相互独立的;
2. 线程相比于进程的优势?
- 线程的创建速度比进程快
- 线程的销毁速度比进程快
- 线程的 CPU 调度的速度比进程快