【多线程】-进程与线程

本篇学习线程与进程的基本概念和对应关系


进程

什么是进程?

进程又被称为任务,应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的。

当我们点开任务管理器,就可以查看当前电脑正在进行的进程
在这里插入图片描述

当我们查看电脑进程时发现,当前运行着许多进程,当进程多了,我们需要管理这些进程,也就出现了进程管理。

进程管理

进程管理主要分两步:

  1. 描述一个进程:使用结构体/类,把一个进程有哪些信息,展现出来。
  2. 组织这些进程:使用一定的数据结构,把这些结构体/对象,放在一起

而这些用来描述的结构体,我们需要了解里面的属性。
进程的结构体的核心属性(PCB Process Control Block)

PCB

什么是PCB

PCB(Process Control Block)是指操作系统用于管理和跟踪进程的数据结构。每个运行中的进程都有一个对应的PCB,PCB中存储了进程的各种信息,包括但不限于以下内容:

  1. 进程状态:记录进程当前的状态,如运行、就绪、阻塞等。
  2. 程序计数器(Program Counter):指示下一条要执行的指令的地址。
  3. 寄存器信息:保存进程当前的寄存器状态,包括通用寄存器、指令指针、栈指针等。
  4. 进程优先级:用于调度算法确定进程的执行顺序。
  5. 进程标识符(PID):唯一标识一个进程的数字或字符串。
  6. 内存管理信息:记录进程所占用的内存地址空间信息。
  7. 打开文件表:记录进程打开的文件及其相关信息。
  8. 进程控制信息:包含父进程ID、子进程ID等关系和控制信息。

PCB允许操作系统追踪和管理多个进程,并在需要时进行上下文切换,以实现进程间的并发执行。通过操作和更新PCB中的信息,操作系统可以有效地管理和控制进程的运行。

操作系统会创建一个PCB,把这个PCB加入到链表上

  1. pid 每一个进程都需要一个唯一的身份标识
  2. 内存指针 当前这个进程使用的时内存的哪一部分
    进程的使用需要消耗一定硬件资源,如内存 使用了哪些内存上的资源
  3. 文件描述符表 (文件:在硬盘上存储的数据,是以文件为单位整理的)
    当进程运行时,每打开一个文件,就会产生一个“文件描述符”(标识了这个打开的文件),一个进程可能打开多个文件,对应了一组文件描述符,把这些文件描述符放在一个顺序表这样的结构里,就构成文件描述表
    使用了哪些硬盘上的资源

进程的运行,需要从操作系统申请资源~~,
进程是操作系统进行分配的基本单位

  1. 描述与CPU资源相关的属性,辅助进行,进程调度

进程状态

进程状态主要是两个
就绪态:进程已经准备好,随时可以在cpu上执行
阻塞态:该进程暂时无法在cpu上执行

进程的优先级

进程的调动具有优先级调动,~~~~

进程的上下文

上下文,表述了当前进程执行到了哪里这样的存档记录,是CPU内部的一系列寄存器的值。
当进程离开CPU时,对当前的运行的中间结果进行存档,当下次进程回到cpu时,恢复之前的“存档”,继续执行
具体到进程,存档:进程离开CPU,会把寄存器的值保存在PCB的上下文字段中,读档,进程下次回来cpu,再把PCB的值恢复到寄存器中

进程的记账信息

统计了每个进程,在CPU上执行了多久,可以作为调度的参考依据

操作系统往往使用双向链表这样的结构来组织pcb

  1. 创建一个进程,就是创建了一个链表节点
  2. 销毁一个进程,就是把链表的结点给删除了
  3. 遍历一个进程列表,就是在遍历一个链表

并行与并发

并行~
同一时刻,CPU两个核心同时执行多个进程,此时进程就是并发执行的
并发~
一个核心,执行一会进程1,再去执行进程2,再执行进程3,当切换速度够快时,“同时”执行,由操作系统控制

线程

什么是线程?

线程是计算机程序中的执行单元,它是进程中的一部分。一个进程可以包含多个线程,每个线程都能独立地执行任务。线程是操作系统能够进行调度和执行的最小单位。

一个线程就是一个 “执行流”. 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 “同时” 执行着多份代码。

操作系统真正调度的,是在调度线程。

线程的作用

线程是计算机程序并发执行的一种方式。它允许程序同时执行多个任务,从而提高了系统的效率和响应能力。
虽然多进程也能实现 并发编程, 但是线程比进程更轻量。
主要体现在以下几个方面:

  1. 并发性:线程使得程序能够同时执行多个任务,而不是按照顺序逐个执行。这样可以充分利用计算机系统的处理能力,提高程序的整体执行效率。

  2. 资源共享:线程可以共享同一个进程中的资源,如内存、文件等。这样可以减少资源的重复创建和管理,提高资源利用率。

  3. 响应性:通过将耗时的任务放在后台线程中执行,主线程可以保持响应,继续处理用户输入和其他关键任务。这样可以提高用户体验,使程序更加灵活和高效。

  4. 并行计算:线程可以在多核处理器上并行执行,使得多个任务可以同时进行,从而加速计算过程。这对于需要大量计算的应用程序来说尤为重要。

线程与进程的区别

进程,是比较“重量级”的速度慢/消耗资源多
创建一个进程,成本比较高
销毁一个进程,成本也比较高
调度一个进程,成本也比较高
资源分配耗时多,每个进程的创建使用都需要系统进行资源调配。(资源分配)

而线程则是更轻量的(轻量级进程)
一个进程中含一个或多个线程,每个线程又是一个可以独立调度执行的“执行流”,执行流本身就是并发的,而这些线程共用一份进程的系统资源,省下了系统分配资源的开销.

操作系统真正调度的,是在调度线程
线程是操作系统调度的基本单位
进程是操作系统资源分配的基本单位

只有在进程启动,创建第一个线程是需要申请系统资源
当进程(第一个线程)创建完毕,就不必申请资源,创建/销毁的效率就提高了不少

当同一个程序想要并发的完成多组任务,用多线程比较合适(更方便高效)
当多个程序之间,就是多个进程比较合理(隔离性,互不影响)

如果一个线程出现问题,对于同一个进程里的其他线程来说都会造成影响

区别
进程包含线程
进程有自己独立的内存空间和文件描述符,同一个进程中的多个线程之间,共享一份地址空间和文件描述符
线程是操作系统调度的基本单位
进程是操作系统资源分配的基本单位
进程之间具有独立性,一个进程挂了,不会影响其他进程,如果一个线程出现问题,对于同一个进程里的其他线程来说都会造成影响

多个线程/多个进程都可以并发和并行的

  1. 进程是系统进行资源分配和调度的一个独立单位,线程是程序执行的最小单位。
  2. 进程有自己的内存地址空间,线程只独享指令流执行的必要资源,如寄存器和栈。
  3. 由于同一进程的各线程间共享内存和文件资源,可以不通过内核进行直接通信。
  4. 线程的创建、切换及终止效率更高。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值