赞
踩
进程(Process),是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行【资源分配和调度】的一个独立单位。
- 几个要点
- 进程是【程序】的【一次执行】
an instance of a computer program that is beiing executed- 进程是一个程序及其数据在处理机上顺序执行时所发生的的【活动】
- 进程是程序在一个【数据集合】上运行的过程
- 进程是系统进行【资源分配和调度】的一个【独立】单位(或者说基本单位)
每个进程启动后都有不同的PCB
什么是线程?
- Thread,进程的轻型实体,也叫“轻量级进程”,是一系列活动按事先设定好的顺序依次执行的过程,是一系列指令的集合
- 是一条执行路径,不能单独存在,必须包含在进程中
- 线程是OS中运算调度的最小单位
为什么引入线程?
- 提高OS的并发性
- 一个进程中可以包含多个线程,同一进程中的线程可以共享进程内的资源,所以一个进程中可以同时处理多件事,假如不引入线程,一个进程只能做一件事,那么要做多件事的时候就要创建多个进程,每个进程都要系统分配一次资源,会导致资源浪费,降低性能
线程的属性
- 轻型实体
- 独立调度和分派的基本单位
- 可并发执行
- 共享进程资源
进程与线程比较
- 调度
- 操作系统调度的最小单位为线程
- 同一进程内线程的切换不会导致进程的切换
- 拥有资源(内存、寄存器、I/O设备等)
- 进程拥有资源(资源所有者),管理资源,是操作系统分配资源的最小单位
- 线程不拥有资源,可以向所属进程申请和操作该进程的资源,同一进程的所有线程共享资源
- 并发性
- 操作系统引入进程提高了并发性,引入线程进一步提高了并发性,后续引入纤程(携程)是为了更进一步提高并发性
- 系统开销
- 创建/撤销/切换进程系统开销较大,创建需要分配处理机、内存等,撤销需要回收先前分配的资源
- 创建/撤销/切换线程系统开销相对较小,线程执行只需要将寄存器中的少量数据切换即可,不用动内存资源
- 地址空间和其他资源
- 操作系统给进程分配内存是一块独立的空间,对于其他进程不可见
- 同一进程内的线程互相可见,共享内存等资源(寄存器不共享)
- 通信
- 进程间通信需要其他手段辅助
- 同一进程内的线程间通信相对简单,可以创建全局变量,所有线程可见
线程相对于进程,大大降低了创建、撤销和切换可执行实体的成本和难度
1)线程所有的操作都在用户空间完成(创建、撤销、终止、调度、通信、同步等),管理者为当前进程,线程切换不需要访问内核空间,线程调度效率较高
2)操作系统提供一套线程库和接口,用户级进程进行调用
3)操作系统内核看不见用户级线程,只能按进程来进行调度,如果有两个进程,一个有30个线程,一个有300个线程,那么系统使用时间片轮转算法来为进程分配时间,每个进程分配相同的时间片,会导致线程数多的进程分到的时间片远远不够,资源分配不够合理
4)由于操作系统看不到所谓的用户级线程,所以线程访问操作系统内核服务的时候,是由用户级进程来进行访问,这时候操作系统会执行陷入指令,导致系统中断,该进程的其他线程也无法继续执行,并且该进程的任何一个线程要访问内核服务时都会导致整个进程切换到内核级别,属于进程级切换
5)内核分配给每个进程时间片,由进程来决定时间片分配给那些线程来使用,同一时间一个CPU只能执行一个进程,而同一时间一个进程又只执行一个线程,所以无法实现进程内线程的并行
1)在内核空间实现多个线程,直接在内核空间进行线程切换,实现线程级的并行效果,对于同一进程来说,他的线程可以进行并行执行了,运行效率较高
2)用户空间和内核空间是线程级切换,相对来说开销更小
3)由于线程的控制块在内核空间,而数据段和程序段都在用户空间,所以线程的切换都是在内核空间完成的,线程的执行在用户空间完成的,但是当发生线程切换的时候就需要先从用户态切换到内核态,在内核空间中在切换到目标线程上,再切换回用户空间继续执行,所有的线程切换都需要【用户态→内核态→用户态】两次转换,线程调度开销较大
1)内核空间和用户空间都有线程,多数的用户线程映射到少数的内核线程上,内核线程和用户线程为多对多关系
2)既减少了线程切换时不必要的用户、内核态转换,又实现了多线程的并行
3)内核线程数量受物理机影响,用户线程可以无限创建,那么实际上运行的时候使用的是分时交替执行(时分多路复用)技术
4)线程调度算法更加复杂,现在操作系统大多数使用的是这种组合方式
进程或者线程的切换归根结底为 进程/线程 控制块的切换
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。