进程与线程(概念、并行、并发)

news2025/1/20 22:40:14

进程与线程

  • 一、定位
  • 二、什么是进程?
  • 三、进程管理
    • 1、PCB相关属性(了解)
    • 2、多任务的处理方式
  • 四、什么是线程?
  • 总结

一、定位

在计算机系统中,操作系统是其中的重要一环。对上,给软件提供稳定的运行环境;对下,管理着各种硬件设备。总的来说,操作系统是一个非常复杂的软件,本章我们只讨论其中一个非常重要的模块——进程管理。

二、什么是进程?

进程(process)又叫做任务(task)。其中在操作系统一书中提出这样的概念:每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;

看完定义,是不是更懵了呢?其实也没那么复杂,我们将上述定义简化,其实进程就是操作系统对运行程序的一种抽象,一个运行起来的程序就是进程(process)/任务(task)。在我们的计算机上有各种各样的应用程序,当我们运行程序,就会在系统中形成一个进程,我们可以通过任务管理器查看当前系统里的进程:

注意在操作系统内部,进程又是操作系统进行资源分配的基本单位。

三、进程管理

正如上图,我们的系统中运行着很多进程,为了帮助操作系统实现资源的分配、调度和管理,并保持计算机系统的稳定性和安全性,操作系统需要进行进程管理。

在操作系统中,将进程抽象为了一个结构体——进程控制块抽象(PCB Process Control Block),每一个 PCB 对象都是一个进程。操作系统再通过数据结构将PCB对象组织起来,方便进行管理。

1、PCB相关属性(了解)

有关系统资源的属性:

(1)进程标识符pid: 用于标识一个进程的唯一编号。

(2)内存指针:标记当前进程使用的内存的位置(进程跑起来就需要消耗一定的资源,内存指针标识着进程运行的时候使用了哪些内存上的资源)

(3)文件描述表:硬盘上存储的数据往往以文件为单位进行整理。进程每次打开一个文件,就会产生一个文件描述符(标识这个被打开的文件)一个进程可能会打开多个文件,对应一组文件描述符。把这些文件描述符放到一个顺序表这样的结构里就构成了文件描述表。

进程调度的属性:
(1)进程状态

就绪状态(Ready):当进程已经完成了初始化,并且等待分配CPU时间片时,进程处于就绪状态。此时进程已经处于可运行状态,只需要等待CPU的调度即可执行。

运行状态(Running):当进程正在执行指令并占用CPU资源时,进程处于运行状态。此时进程处于执行态,正在执行程序代码。

阻塞状态(Blocked):当进程因等待某个事件的发生而被挂起时,进程处于阻塞状态。例如,等待IO请求完成或者等待某些资源释放,此时进程无法占用CPU资源而被挂起。

创建状态(New):当操作系统为进程分配所需的资源并执行初始化时,进程处于创建状态。在该状态下,进程尚未分配到CPU时间片,也还未被加载到内存中执行。

终止状态(Terminated):当进程执行完毕或者出现致命错误而被强制终止时,进程处于终止状态。在该状态下,操作系统将释放该进程占用的所有资源,包括内存、文件句柄等等。

(2)进程的优先级

进程之间的调度就有一定的优先级。优先级高的先调度。

(3)进程的上下文

上下文就是描述了当前进程执行到哪里这样的存档记录,进程在离开CPU的时候就要把当前运行的中间结果存档。等到下次进程回到cpu上,再恢复之前的存档,从上次结果继续往后执行。

进程的上下文就是指进程运行过程中,CPU内部一系列寄存器的值。 寄存器有很多种,其中最典型的作用就是保存当前进程执行的中间结果,包括进程运行到那一条指令,进程离开CPU就需要把这些寄存器的值保存到PCB的上下文字段中,进程下次回来,再把PCB中的值恢复到寄存器中。

(4)进程的记账信息

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

2、多任务的处理方式

概念补充:这里的CPU核心数指的是逻辑核心。例如我的电脑是8内核和16线程处理器,即8个物理核心,16个逻辑核心。

并行

同一时刻,多个核心,同时执行多个进程,此时这这多个进程就是并行执行。

并发

对于单核CPU来说,在同一时间只能执行一个进程的代码,所以在单核CPU上实现多进程,是通过CPU快速的切换不同进程,看上去就像是多个进程在同时进行。例如一个核心,先执行进程1,执行一会儿后,再去执行进程2,再执行一会儿后,再去执行进程3,此时只要这里的切换速度足够快,看起来1、2、3就是同时执行的。

这就是为什么虽然我的电脑CPU只有16个核心,却可以同时执行这么多的任务,原因就是通过并发+并行的方式来完成的。当操作系统对进程的调度足够快,看起来就是同时的。

为了实现多个任务能够同时执行,所以系统一般采用并发+并行的方式进行,这个过程是系统自身控制的,我们一般感知不到。很多时候我们将并行+并发统称为并发。

四、什么是线程?

定义

线程是“更轻量”的进程,一个进程中可以包含多个线程,每个线程都是一个独立可以调度执行的“执行流”,这些执行流之间本身就是并发的。

单核CPU的发展遇到了瓶颈,要想提高算力, 就需要多核 CPU,而并发编程能更充分利用多核 CPU资源。虽然多进程编程和多线程编程都能满足“并发编程”的需求,但是我们更鼓励使用多线程编程,至于为什么?下面我们来详细讨论讨论:

在定义中已经提到,线程是“轻量级”的进程。也就是说相比于线程,进程更“重量”,那么这个重量具体体现在哪里呢?

(1)创建进程比创建线程更慢。
(2)销毁进程比销毁线程更慢。
(3)调度进程比调度线程更慢。

造成以上问题的原因主要体现在资源分配上,我们上面提到,进程是系统进行资源分配的基本单位,而资源分配往往又是一个非常耗时的操作,就单拿内存分配为例,系统要为进程分配一块内存,就需要遍历空闲的内存,找到一块合适的内存进行分配。如果多个进程都在申请内存,那么系统进行内存分配的时候就得一个一个来。而对于线程而言,进程包含线程,意味着在创建线程的时侯,系统资源是已经分配好了的,这也就为线程省下了分配资源的开销,因此多线程编程才是更优的选择。

我们可以将上述过程形象化为工厂和车间,如果一个工厂要扩大生产,可以采用如下两种方式:

  1. 通过增开分工厂的方式
  2. 通过增加新车间的方式

线程特点:

  1. 线程是操作系统调度执行的基本单位。
  2. 每个线程都是一个独立的执行流,多个线程之间,也是并发执行的。
  3. 多个线程可能是在多个CPU核心上同时运行(并行),也可能是在一个CPU核心上,通过快速切换进行运行(并发)。

总结

进程和线程的区别:

  1. 进程包含线程,一个进程里可以有一个或多个线程。
  2. 进程有自己独立的系统资源(内存空间和文件描述符表),同一个进程中的多个线程之间共享一份系统资源(地址空间和文件描述符表)。
  3. 进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位。
  4. 进程之间具有独立性,一个进程挂了,不会影响到别的进程。同一个进程里的多个线程之间一个线程挂了,可能会把整个进程带走,影响到其他线程。

线程的优势:

进程比较重量,即如果频繁地创建/销毁进程(资源分配),成本较高。而对于多线程,只有在进程启动,创建第一个线程的时候,需要花成本去申请系统资源,一旦进程创建完毕,此时后续再创建的线程就不必在申请资源了。创建/销毁的效率就提高了不少。所以鼓励采用多线程编程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/943314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssm+vue线上体验馆管理系统源码和论文

ssmvue线上体验馆管理系统源码和论文085 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储&#xff0…

el-collapse折叠面板默认全部展开/关闭

所要展开项的name标识符与v-model绑定值匹配即可默认展开。 1. 案例 <el-collapse v-model"activeNames"><el-collapse-item name"0" title段落1>那一年&#xff0c;花开得不是最好&#xff0c;可是还好&#xff0c;我遇到你&#xff1b;&l…

高忆管理:A股已具备年度配置价值

周末利好四箭齐发&#xff0c;财政部、证监会、三大买卖所均宣布严重方针调整&#xff0c;首要包含印花税调降、IPO节奏阶段性收紧、融资保证金比例降至80%、限制大股东和实控人减持等。二级商场上&#xff0c;大盘大幅高开后一路震动走低&#xff0c;终究收盘涨幅显着收窄。业…

ROS通信机制之服务(Service)的应用

1、服务的概述 在上节我们讲过一个重要通信机制话题&#xff1a;ROS通信机制之话题(Topics)的发布与订阅以及自定义消息的实现&#xff0c;这里介绍另外一种节点之间传递数据的方法&#xff1a;服务(Service)服务的本质是同步的跨进程函数调用&#xff0c;也就是说节点可以调用…

骨传导耳机哪款比较好,市面上最好的骨传导耳机分享

随着科技的日新月异&#xff0c;骨传导耳机也在不断更新换代。市场上涌现出许多品牌&#xff0c;这使得消费者在购买时感到困惑。别担心&#xff01;我们为你整理了一些市场上最好的骨传导耳机品牌&#xff0c;希望能帮到你。现在&#xff0c;就让我们一起探索这些骨传导耳机的…

人工智能会成为人类的威胁吗?马斯克、扎克伯格、比尔·盖茨出席

根据消息人士透露&#xff0c;此次人工智能洞察论坛将是一次历史性的聚会&#xff0c;吸引了来自科技界的许多重量级人物。与会者们将共同探讨人工智能在科技行业和社会发展中的巨大潜力以及可能带来的挑战。 埃隆马斯克&#xff0c;特斯拉和SpaceX的首席执行官&#xff0c;一直…

ssm+vue理发店会员管理系统源码和论文

ssmvue理发店会员管理系统源码和论文089 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&a…

《高性能Linux网络编程核心技术揭秘》已出版

#好书推荐##好书奇遇季#《高性能Linux网络编程核心技术揭秘》&#xff0c;京东当当天猫都有发售。定价109元&#xff0c;网店打折销售更便宜。本书配套示例项目源码、作者QQ答疑。 本书详解高性能Linux网络编程的核心技术及DPDK框架&#xff0c;剖析Nginx高性能服务器架构&…

《PyTorch 2.0深度学习从零开始学》已出版

#好书推荐##好书奇遇季#《PyTorch 2.0深度学习从零开始学》&#xff0c;京东当当天猫都有发售。定价69元&#xff0c;网店打折销售更便宜。本书配套示例项目源码、PPT课件。 本书以通俗易懂的方式介绍PyTorch深度学习基础理论&#xff0c;并以项目实战的形式详细介绍PyTorch框…

无涯教程-Android - 应用组件

应用程序组件是Android应用程序的基本组成部分&#xff0c;这些组件需要在应用程序清单文件 AndroidManifest.xml 注册&#xff0c;该文件描述了应用程序的每个组件以及它们如何交互。 Android应用程序可以使用以下四个主要组件- Sr.NoComponents & 描述1 Activities 它们…

基于JAVA SpringBoot和HTML婴幼儿商品商城设计

摘要 随着网络技术的发展与普遍,人们的生活发生了日新月异的变化,特别是计算机的应用已经普及到经济和社会的各个领域.为了让消费者网上购物过程变得简单,方便,安全,快捷,网上商城购物成了一种新型而热门的购物方式。网上商城在商品销售的发展中占据了重要的地位,已成为商家展示…

Python直接变快五倍?最新的优化解释器和内存管理

来自公众号&#xff1a;OSC开源社区 2020 年秋&#xff0c;CPython 核心开发者 Mark Shannon 提出了关于 Python 的几个性能改进&#xff0c;这个提议被称为 “香农计划” (Shannon Plan)。 Shannon 随后创建了 Faster Cpython 项目&#xff0c;他希望在 4 年的时间里&#xff…

Boost开发指南-4.11config

config config库主要是提供给Boost库开发者&#xff08;而不是库用户&#xff09;使用&#xff0c;它将程序的编译配置分解为三个正交的部分&#xff1a;平台、编译器和标准库&#xff0c;帮助他们解决特定平台特定编译器的兼容问题。 一般来说&#xff0c;config库不应该被库…

《Flink学习笔记》——第二章 Flink的安装和启动、以及应用开发和提交

​ 介绍Flink的安装、启动以及如何进行Flink程序的开发&#xff0c;如何运行部署Flink程序等 2.1 Flink的安装和启动 本地安装指的是单机模式 0、前期准备 java8或者java11&#xff08;官方推荐11&#xff09;下载Flink安装包 https://flink.apache.org/zh/downloads/hadoop&a…

循环购商业模式:挖掘用户价值,创新引领商业未来-微三云门门

亲爱的企业家们&#xff0c;我是微三云门门&#xff01;今天&#xff0c;我将为大家详细介绍一种颠覆性的商业模式&#xff1a;循环购商业模式。这个模式不仅可以帮助企业提升平台的复购率&#xff0c;还能够拉新用户并提升用户的消费率。让我们一起深入了解这个引人注目的商业…

MySQL8.Xx安装控制台未参数随机密码解决方案

MySQL8.xx一主两从复制安装与配置 MySQL8.XX随未生成随机密码解决方案 一: Mysql 安装时控制台未生成密码 安装过程中解压或者时安装时报错等,这种情况一般是因网络等其他原因导致下载的安装包不完整&#xff0c; 重新下载安装即可; 二: 安装解压都没问题,就是不生成随机密…

软件测试用例经典方法 | 单元测试法案例

单元测试又称模块测试&#xff0c;是对软件设计的最小单元的功能、性能、接口和设计约束等的正确性进行检验&#xff0c;检查程序在语法、格式和逻辑上的错误&#xff0c;并验证程序是否符合规范&#xff0c;以发现单元内部可能存在的各种缺陷。 单元测试的对象是软件设计的最…

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书)

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 内容简介 作者简介 使用Python做一个计算器 本期赠书 近年来国家大力支持半导体行业&#xff0…

前端组件库造轮子——Tree组件开发教程

前端组件库造轮子——Tree组件开发教程 前言 本系列旨在记录前端组件库开发经验&#xff0c;我们的组件库项目目前已在Github开源&#xff0c;下面是项目的部分组件。文章会详细介绍一些造组件库轮子的技巧并且最后会给出完整的演示demo。 文章旨在总结经验&#xff0c;开源分…

三雄极光家居秋季新品发布,争滔滔不绝!

​8月28日&#xff0c;三雄极光2023家居秋季新品发布暨订货会于中山古镇盛大启幕&#xff0c;会议以“聚力革新 影势领行”为主题&#xff0c;采用线上、线下相结合的方式举行。三雄极光总裁张宇涛、副总裁林岩、营销总经理陈勤显、家居事业部副总经理赵峰等领导出席了本次会议…