文章目录
进程
进程是操作系统分配资源和调度的基本单位
进程的组成部分
程序段:存放要执行的程序代码。
数据段:存放程序运行过程中使用的各种数据。
进程控制块(PCB):包含进程的各种控制信息,如进程状态、优先级、记账信息、上下文、调度信息等
进程参与了CPU的调度,管理了所有资源
从操作系统上来看,运行程序就指的是一个进程,因为存在切换,所以进程管理了很多资源,比如:打开的文件、挂起的信号、进程状态、内存地址空间等等
线程
线程是CPU调度和分派的基本单位
线程的组成部分:
线程控制块(TCB):包含线程的各种控制信息,如线程状态、优先级、栈指针、寄存器内容等。
线程栈:用于存储线程执行时的局部变量、函数调用信息等。
进程和线程的区别
本质区别:进程是系统分配资源的基本单位,线程是系统调度的基本单位。
包含关系:进程是包含线程的. 每个进程⾄少有⼀个线程存在,即主线程。线程是进程的一部分,所以线程也被称为轻量级进程或轻权进程.
内存分配:进程和进程之间不共享内存空间.同⼀个进程的线程之间共享同⼀个内存空间.
影响关系:进程而言,进程和进程之间的,所涉及到的资源是互相独立的(稳定性)——效率低——引进线程
一个进程内部的线程会互相影响(线程安全)进程和线程的创建和销毁:进程 创建需要申请资源,进程销毁需要释放资源,这个过程操作系统需要为进程分配独立的内存空间,并复制父进程的某些资源,销毁同样需要回收其占用的所有资源,所有线程都销毁才释放资源(进程销毁)这个过程复杂且耗时
对于线程来说,第一个线程创建需要申请资源,后续的创建不用申请资源,因为 线程直接共享进程的所有资源,同样的,销毁线程时,操作系统只需回收其占用的少量资源(线程栈,线程控制块),这个过程相对简单且快速。资源开销:每个进程都有独立的代码和数据空间(程序上下文), 程序之间的切换会有较大的开销
线程可以看作轻量级的进程,同一类线程共享代码和数据空间, 每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行.
线程共享了进程的资源
1、代码段
一个进程有着对应的代码段,线程之间的是共享的。
2、数据区
线程之间共享着函数之外的全局变量,这些变量存放在数据区
3、堆区
堆区存放着引用类型的变量,不同线程的函数栈通过指针来共享这些引用类型的变量
4、打开的文件信息
每个进程都对应着打开的文件的列表,线程之间是共用的。
5、页表信息
操作系统采用虚拟空间映射,一个进程对应着一个页表,线程之间也是共享的。
进程和线程的联系
- 一个线程只能属于一个进程,一个进程包含了一个或多个线程
2. cpu分配资源给进程,同一进程的所有线程共享该进程的所有资源(包括内存资源和硬盘资源,网络带宽…)。 - ⼀个进程挂了⼀般不会影响到其他进程.但是⼀个线程挂了,可能把同进程内的其他线程⼀起带走(整个进程崩溃).
- 进程与进程之间是相互独立的,互不影响的
- 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
- 线程是指进程内的一个执行单元,也是进程内的可调度实体