进程与线程

进程和线程一直是计算机当中十分重要的两个概念。作为操作系统当中十分重要的模块,两者虽然名称相近且联系紧密,但各自含义和实际作用却有着许多不同的地方。

进程 process

进程是一种由操作系统提供出的抽象概念,它是操作系统对一个正在运行的程序的一种抽象。简单来说,一个跑起来的程序就是进程,反之则不是。引入这个概念最主要的目的是为了解决“并发编程”这样的问题。作为一个重要的软件资源,进程是操作系统资源分配的基本单位,由操作系统内核负责管理

管理(描述+组织)

  • 描述:使用C语言结构体来描述进程属性,讲清楚相关属性特征。用来描述进程的这个结构体,叫做PCB(进程控制块)
  • 组织:通过双向链表,将多个PCB串到一起(非单纯双向链表)。

创建一个进程,本质上就是创建一个PCB结构体对象,将这个结构体插入链表当中;销毁一个进程,本质上就是在链表上将PCB结点删除。任务管理器查看进程列表,本质上就是遍历PCB链表。

PCB(进程控制块)当中的进程特征

1.pid:进程的身份标识符(有唯一的数字)

2.内存指针:指向说明自己的内存(硬件资源)

3.文件描述符表:硬盘文件等其他资源(硬件资源)

4.进程调度相关属性:

进程的状态:就绪状态;运行状态;阻塞状态(如线程进行密集的IO操作,读写数据)。

优先级:进程的调度并非一碗水端平。

上下文:就是CPU当中各个寄存器的值,本质上就是存档内容(寄存器:CPU内置的存储数据的模块,保存程序运行过程中的中间结果)

操作系统在进行进程切换时,需要把进程执行的“中间状态”记录并保存,下次在CPU上运行时,就可以恢复上次的状态继续运行。

保存上下文就是将CPU当中寄存器的值,记录保存进内存(PCB)中;恢复上下文就是把内存中这些寄存器的值恢复回去。

记账信息:操作系统统计每个进程在CPU上占用的时间和执行的指令数目,以此来决定下一阶段如何调度。

线程 thread

线程是操作系统调度执行的基本单位,一个线程就是一个 "执行流"。线程存在于进程当中,又被称为“轻量级进程”。进程有多个线程后,每个线程是独立在CPU上进行调度的。线程和进程均可以实现并发编程,但线程比进程更加轻量化。单个进程可以包含一个线程,也可以包含多个线程(不能没有)(一对多的关系)。同一个进程中的多个线程之间,共用了进程的同一份资源(主要为内存和文件描述符表)。一个线程是通过一个PCB进行描述的,一个进程中对应的也就是一个或多个PCB了。

进程与线程的联系与区别

 

联系

  • 进程是包含线程的。每个进程至少有一个线程存在,即主线程。
  • 进程和进程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间。
  • 由于同一进程的各线程间共享内存和文件资源,可以不通过内核进行直接通信。

区别

  • 创建线程比创建进程更快;销毁线程比销毁进程更快;调度线程比调度进程更快。
  • 进程专门负责资源分配,线程负责调度相关内容。进程是系统分配资源的最小单位,线程是系统调度的最小单位。
  • 进程有自己的内存地址空间,线程只独享指令流执行的必要资源,如寄存器和栈。

线程的优点

  1. 线程的创建、切换及终止效率更高。
  2.  线程占用的资源要比进程少很多。
  3. 能充分利用多处理器的可并行数量。
  4.  在等待慢速I/O操作结束的同时,程序可执行其他的计算任务。
  5.  计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现。
  6. I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

希望能给到大家帮助,便于更好的理解这两个概念。 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值