作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。
热门文章推荐:
- (1)《为什么很多人工作 3 年 却只有 1 年经验?》
- (2)《一文掌握大模型提示词技巧:从战略到战术巧》
- (3)《AI 时代,程序员的出路在何方?》
- (4)《如何写出高质量的文章:从战略到战术》
- (5)《我的技术学习方法论》
- (6)《我的性能方法论》
- (7)《AI 时代的学习方式: 和文档对话》
一、AI 讲解
进程和线程的区别
概念 | 进程 | 线程 |
---|---|---|
定义 | 进程是操作系统进行资源分配和调度的基本单位,是应用程序在执行过程中的一个实例。 | 线程是进程中的一个实体,被系统独立调度和分派的基本单位,是一条执行流程。 |
资源独立性 | 拥有独立的地址空间,一个进程崩溃后,在保护模式下不会影响到其他进程 | 线程共享所属进程的地址空间和资源,一个线程崩溃可能影响到同一进程的其他线程 |
开销 | 创建和销毁进程的开销比较大,切换进程也比较耗时 | 线程的创建、销毁和切换的开销小得多 |
通信 | 进程间通信(IPC)需要操作系统提供的特殊机制,如管道、信号、共享内存等 | 线程间可以直接读写进程数据段(如全局变量)来进行通信,更高效 |
依赖性 | 进程间相互独立 | 线程是进程的一部分,线程间存在依赖关系 |
进程的状态转换
进程在其生命周期内,会经历不同的状态。以下是进程可能的基本状态及其转换:
- 新建态:进程刚被创建,尚未被调度运行。
- 就绪态:进程已分配到除CPU以外的所有必要资源,只等待CPU时间片以运行。
- 运行态:进程正在CPU上执行。
- 阻塞态:进程由于等待某个事件(如I/O操作完成)而被挂起。
- 终止态:进程完成执行后的出口状态。
状态转换图
新建态 ---> 就绪态 ---> 运行态 ---> 终止态
\ ^ |
\ | v
\------ 阻塞态 <----
- 新建态到就绪态:进程被创建后,初始化资源,准备运行,被置于就绪队列。
- 就绪态到运行态:调度程序选择之,分配CPU时间片。
- 运行态到就绪态:CPU时间片用完,未完成任务重新排队等待CPU。
- 运行态到阻塞态:执行过程中需要等待外部事件(如I/O操作),被挂起。
- 阻塞态到就绪态:等待的事件已完成,重新等待CPU分配。
- 运行态到终止态:进程完成任务或被终止。
二、AI 出题
(1)题目
-
进程与线程的主要区别是什么?
A. 进程的执行速度更快
B. 线程拥有独立的地址空间
C. 进程拥有独立的地址空间
D. 线程间通信需要特殊的IPC机制 -
在进程状态转换中,哪种状态表示进程等待CPU分配?
A. 新建态
B. 就绪态
C. 阻塞态
D. 运行态 -
哪一项不是线程之间进行通信的方法?
A. 共享内存
B. 管道
C. 全局变量
D. 信号量 -
进程创建子进程后,子进程的初始状态是什么?
A. 就绪态
B. 新建态
C. 运行态
D. 阻塞态 -
在进程的生命周期中,哪个状态不是必经之路?
A. 就绪态
B. 阻塞态
C. 运行态
D. 新建态 -
当一个进程等待I/O操作完成时,它通常处于什么状态?
A. 阻塞态
B. 运行态
C. 就绪态
D. 新建态 -
线程相对于进程有什么优势?
A. 更高的资源消耗
B. 独立的地址空间
C. 更高的创建和销毁开销
D. 更低的创建和切换开销 -
如何描述进程间的关系?
A. 不存在依赖关系
B. 所有进程共享地址空间
C. 直接通过全局变量进行通信
D. 需要操作系统提供的特殊机制进行通信 -
进程在哪个状态下完成了其生命周期?
A. 就绪态
B. 运行态
C. 阻塞态
D. 终止态 -
进程状态从运行态到就绪态的转换通常是因为什么?
A. CPU时间片用完
B. 进程执行完成
C. 等待I/O操作
D. 等待外部事件
(2)答案和解析
-
C. 进程拥有独立的地址空间
- 进程具有独立的地址空间,而线程共享进程的地址空间。
-
B. 就绪态
- 就绪态表示进程已准备好运行,只是在等待CPU时间片。
-
B. 管道
- 线程间通常通过共享内存、全局变量、信号量进行通信,管道是进程间通信的一种方式。
-
B. 新建态
- 子进程被创建时,其初始状态是新建态,随后它会转入就绪态。
-
B. 阻塞态
- 阻塞态不是进程生命周期中的必经之路,因为某些进程可能从始至终不需要等待任何I/O操作。
-
A. 阻塞态
- 当进程等待I/O操作时,它通常会被放入阻塞态。
-
D. 更低的创建和切换开销
- 线程的创建、销毁和切换开销相对于进程来说更低。
-
D. 需要操作系统提供的特殊机制进行通信
- 进程间通信需要通过操作系统提供的特殊机制,如管道、消息队列、共享内存等。
-
D. 终止态
- 终止态表示进程已经完成了其生命周期。
-
A. CPU时间片用完
- 当CPU时间片用完时,进程会从运行态转换到就绪态,等待再次被调度。