进程与线程

本文深入解析了进程和线程的概念,阐述了它们在资源分配、执行、通讯及状态转换上的区别与联系。进程作为资源分配的基本单位,拥有独立的地址空间;线程则共享同一进程的资源,是CPU调度的最小单位,更利于提高执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程:资源(CPU,内存)分配的基本单位,是程序执行的一个实例。程序运行时创建进程并分配资源,将进程放入进程就绪队列,进程调度器选中时分配CPU时间,程序运行。Linux 中fork() 可在父进程中创建子进程。
线程:程序执行的最小单位,程序执行的最小单元,是CPU调度和分派的基本单位,一个进程可以由很多线程组成,线程间共享进程的所有资源,线程有自己的堆栈和局部变量。线程由CPU独立调度执行。多CPU环境下允许多线程同时运行。 同样多线程也可以实现并发操作,每个请求分配一个线程来处理。

联系与区别:
1. 进程是资源分配的最小单位,线程是程序执行的最小单位;
2. 进程有自己独立的地址空间,每启动一个进程,系统会为他分配地址空间,建立数据表维护代码段,堆栈段,数据段,操作非常昂贵。线程是共享进程中所有数据的,使用相同的地址空间,切换线程的花费要小的多,创建线程的开销也小的多。
3. 线程之间的通讯更方便,同进程下的线程共享全局变量,静态数据,进程之间需要使用通讯(IPC)。但是线程也需要处理好同步和互斥。
4. 多进程程序更健壮,多线程程序只要有一个线程死了,进程也死了。而多进程之间不会,因为他们有独立的地址空间。

进程的状态

新建态 –> 就绪态 <–> 运行态 –>终止
–>等待态–>就绪态

Linux中:R task_running 可执行态
S task_interruptible 可中断睡眠态
D task_uninterruptible 不可中断睡眠态
T task_stopped/task_traced 暂停或跟踪状态
Z task_dead_exit_zombit 退出状态,僵尸态
X task_dead_exit_dead 退出状态,销毁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值