进程和线程的关系

⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:JavaEE
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖

进程&线程

  • 1. 什么是进程
    • PCB
  • 2. 什么是线程
  • 3. 两者关系

在这里插入图片描述

1. 什么是进程

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
简单地说,进程就是操作系统提供的一种 “软件资源” 。我们计算机正在运行中的程序就可以成为“任务”,也叫做“线程”。

现在大多数用到的系统都属于“多任务操作系统”,也就是同一时刻,可以同时运行多个任务
在这里插入图片描述

上图中的每个进程在运行时,都需要给它分配一定的系统资源。
也就可以说,进程是系统分配资源的基本单位。

在这里插入图片描述

当然也有 “单任务操作系统”,比如:很久之前手机就是同一时刻只能运行一个任务。

但是进程在进行频繁创建和销毁的时候,开销是很大的 ,因为要不断地申请资源(CPU,硬盘,内存…)和释放。

而申请内存的时候,又是很麻烦的,先要指定一个大小,然后系统内部把各种大小的空闲内存,通过一定的数据结构给组织起来。当实际申请的时候,就需要去这样的空间中进行查找,找到个大小合适的空闲内存分配过来。

而线程的存在就是为了解决该问题!

PCB

PCB–进程控制块抽象(PCB Process Control Block)
计算机内部要管理任何现实事物,都需要将其抽象成⼀组有关联的、互为⼀体的数据。在 Java 语⾔中,我们可以通过类/对象来描述这⼀特征。

PCB也就表示了进程信息的结构体。

PCB的重要属性:

  1. pid–是进程身份标识,同一个机器、同一时刻,每个进程的pid是唯一的
  2. 内存指针–指向进程使用的内存存放位置
  3. 文件描述符–进程使用的硬盘的相关信息
    支持进程调度的重要属性:
  4. 状态–就绪状态、运行状态、死亡状态、阻塞状态
  5. 优先级–每个进程执行的优先顺序
  6. 记账信息
  7. 上下文–PCB中的数据结构

“保存上下文” 就是把CPU的关键寄存器中的数据保存到内存中(PCB的上下文属性中)
“恢复上下文” 就是把内存中的关键寄存器中的数据加裁到CPU的对应寄存器中

2. 什么是线程

⼀个线程就是⼀个“执⾏流”。每个线程之间都可以按照顺序执⾏⾃⼰的代码。多个线程之间“同时”执⾏着多份代码。

线程在进程的基础上做了改进,保持独立调度执行,省去了“分配/释放资源”带来的额外开销。

在这里,我们也使用PCB来描述一个线程,在PCB中有一个属性–内存指针
对多个现成的PCB的内存指针,指向的是同一个内存空间。
在这里插入图片描述
但并不是随便几个线程就可以共享资源,我们把能够共享资源的这些线程,放在线程组中。

3. 两者关系

进程与线程是包含关系。每个进程都可以包含一个\多个线程。

在这里插入图片描述

在有线程之前,进程是资源分配的基本单位,也是调度执行的基本单位。
现在,进程只需要专注于资源分配就可以了,调度执行由线程来负责。

进程与线程是同时创建的吗?
在创建进程时,资源就已经分配。
因为一个进程中至少要有一个线程,也就可以说是,在创建第一个线程的同时,进程也就出来了。

总结:

  1. 进程是包含线程的
  2. 每个进程的内存是相互独立、互不干扰的
  3. 每个线程是一个独立的执行流可以执行一些代码,并且单独的参与到cpu调度中,每个线程有自己的一份资源(状态、上下文、优先级、记账信息)
  4. 每个进程有自己的资源,进程中的线程共用这一份资源(内存空间和文件描述符表)
  5. 同一个进程中的线程之间,可能会相互干扰引起线程安全问题
  6. 线程并非越多越好,要能够合适。如果线程太多了,调度开销可能非常明显,
  7. 进程和进程之间不会相互影响
  8. 如果同一个进程中的某个线程抛出异常,是可能会影响到其他线程会把整个进程中的所有线程都异常终止
  9. 进程是资源分配的基本单位,线程是调度执行的基本单位

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式-2.2】创建型——简单工厂和工厂模式

说明:本文介绍设计模式中,创建型设计模式中的工厂模式; 飞机大战 创建型设计模式,关注于对象的创建,本文介绍的简单工厂和工厂模式同样也是。举一个游戏例子,如飞机大战游戏中,屏幕中敌人类型…

优维低代码实践:搜索功能

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…

每日一练:约瑟夫生者死者小游戏

1. 问题描述 约瑟夫问题(Josephus problem)是一个经典的数学和计算机科学问题,源于犹太历史学家弗拉维奥约瑟夫斯(Flavius Josephus)的著作《犹太战记》。问题的描述如下:   在这个问题中,有n…

uniapp微信小程序中阻止事件冒泡

开发场景:列表中展示地块的数据信息,用户可以点击列表进入地块的详情界面,也可以点击列表中的星星按钮进行收藏 遇到的问题:每次点击星星的时候,都会触发父级的点击事件,从而进入到详情界面 原本的代码&am…

android开发:安卓13Wifi和热点查看与设置功能

近日对安卓热点功能做了一些技术验证,目的是想利用手机开热点给设备做初始化,用的是安卓13,简言之: 热点设置功能不可用,不可设置SSID和密码,不可程序控制开启关闭,网上的代码统统都过时了Loca…

【数据结构】树与二叉树(廿五):树搜索给定结点的父亲(算法FindFather)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子、大兄弟结点2. 搜索给定结点的父亲a. 算法FindFatherb. 算法解析c. 代码实现 3. 代码整合 5.3.1 树的存储结构 5. 左儿子右兄弟链接结构 【数据结构】树与二叉树(十九&…

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO 概述 上节 ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO 讲述了如何通过网页控制一个 GPIO。本节实现在网页上控制多个 GPIO。 示例解析 前端设计 前端代码建立了四个 GPIO,如下死 GPIO 2 在前端的…

wmvcore.dll丢失怎么办?解决电脑出现wmvcore.dll丢失问题5个方法

wmvcore.dll缺失5个解决方法与wmvcore.dll丢失原因及文件介绍 引言: 在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是wmvcore.dll缺失。wmvcore.dll是Windows Media Video编码解码相关动态链接库文件之一,它对…

VR全景技术助力政务服务大厅数字化,打造全新政务服务体验

引言: 随着科技的飞速发展,虚拟现实(VR)技术逐渐走进人们的视野。VR全景技术作为VR领域的一项重要应用,以其沉浸式、交互式的特点,正逐渐渗透到各行各业。政务服务大厅作为相关部门与民众之间的桥梁&#…

Elasticsearch(一)

一:简介 The Elastic Stack, 包括 Elasticsearch、 Kibana(展示数据的项目)、 Beats 和 Logstash(这两个是采集和传输数据的项目) 这些项目组合形成的技术栈称为ELK Stack,能够安全可靠地获取任何来源、任…

Vue框架学习笔记——键盘事件

文章目录 前文提要键盘事件(并不是所有按键都能绑定键盘事件)常用的按键不同的tab和四个按键keyCode绑定键盘事件(不推荐)Vue.config.keyCode.自定义键名 键码 神奇的猜想div标签和click.enterbutton标签和click.enter 前文提要 …

Cesium 展示——地球以及渲染数据导出(下载)为图片或 pdf

文章目录 需求分析新加需求分析第一种方式第二种方式需求 将 Cesium 球体以及渲染数据导出为 jpg/png/pdf 分析 获取场景 scene 信息,转为image 的 octet-stream 流 进行下载为图片 /*** @todo canvas 导出图片* @param {string} dataurl - 地址* @return {Blob}*/ functio…

额,收到阿里云给的赔偿了!

众所周知,就在刚过去不久的11月12号,阿里云突发了一次大规模故障,影响甚广。 以至于连咱们这里评论区小伙伴学校的洗衣机都崩了(手动doge)。 这么关键的双11节点,这么多热门业务和产品,这么大规…

平凯星辰携手教育部教育管理信息中心,助力普惠教育数字化

近日,企业级开源分布式数据库厂商平凯星辰与教育部教育管理信息中心达成合作,TiDB 分布式数据库为全国中小学管理服务平台提供全栈服务。双方将携手深入探索领先的数据库技术在教育行业的新场景与新应用,既夯实教育数字化底座,助力…

DS八大排序之直接插入排序和希尔排序

前言 我们前面几期介绍了线性和非线性的基本数据结构。例如顺序表、链表、栈和队列、二叉树等~!本期和接下来的几期我们来详解介绍各个排序的概念、实现以及性能分析! 本期内容 排序的概念以及其运用 常见的排序算法 直接插入排序 希尔排序 一、排序的…

Zabbix 6 详细安装部署教程

目录 一、安装 MySQL 数据库 二、安装 zabbix 监控平台 三、编辑配置文件 四、启动服务 五、zabbix-web 安装 zabbix web 出图展示乱码问题解决方案 zabbix 的安装部署非常简单,官方提供了四种安装途径,分别是二进制 rpm 包安装方式、源码安装方…

jetson nano 串口通信

目录 1.UART通信介绍 2.电脑端准备工作 2.1 安装串口调试助手 2.2 硬件接线 3.Jetson Nano端准备工作 3.1安装库文件 3.2修改主板上电启动串口权限 4.示例程序-发送及接收 4.1 开启串口调试助手 4.2 导入示例程序 4.3 执行程序 4.4 查看效果 4.4.1 串口调试端 4.4…

西南科技大学信号与系统A实验三(线性连续时间系统的分析)

一、实验目的 1.掌握用 matlab 分析系统时间响应的方法 2.掌握用 matlab 分析系统频率响应的方法 3.掌握系统零、极点分布与系统稳定性关系 二、实验原理 1. 系统函数 H(s) 系统函数:系统零状态响应的拉氏变换与激励的拉氏变换之比. H(s)=R(s)/E(s) 在 matlab 中可采用…

ddns-go部署在linux虚拟机

ddns-go部署ubuntu1804 1.二进制部署 1.虚拟机部署 1.下载linux的x86二进制包 wget https://github.com/jeessy2/ddns-go/releases/download/v5.6.3/ddns-go_5.6.3_linux_x86_64.tar.gz2.解压 tar -xzf ddns-go_5.6.3_linux_x86_64.tar.gz3.拷贝执行文件到PATH下&#xff0c…

【前端】浅谈async/await异步传染性

文章目录 概述观点无法解决可以解决 来源 概述 "异步传染性"问题通常是指,当一个函数使用了async和await,其调用者也需要使用async和await处理异步操作,导致整个调用链都变成异步的。这种情况可能导致代码变得更复杂,不…