当前位置: 首页 > news >正文

进程和线程的关系

⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏: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. 进程是资源分配的基本单位,线程是调度执行的基本单位

相关文章:

进程和线程的关系

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:JavaEE 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 进程&线程 1. 什么是进程PCB 2. 什么是…...

YOLOv5全网独家改进:NanoDet算法动态标签分配策略(附原创改进代码),公开数据集mAP有效涨点,来打造新颖YOLOv5检测器

💡本篇内容:YOLOv5全网独家改进:NanoDet算法动态标签分配策略(附原创改进代码),公开数据集mAP有效涨点,来打造新颖YOLOv5检测器 💡🚀🚀🚀本博客 YOLOv5+ 改进NanoDet模型的动态标签分配策略源代码改进 💡一篇博客集成多种创新点改进:NanoDet 💡:重点:更…...

原生DOM事件、react16、17和Vue合成事件

目录 原生DOM事件 注册/绑定事件 DOM事件级别 DOM0:onclick传统注册: 唯一(同元素的(不)同事件会覆盖) 没有捕获和冒泡的,只有简单的事件绑定 DOM2:addEventListener监听注册:可添加多个…...

基于HTML+CSS+JavaScript的登录注册界面设计

一、界面效果: 二、HTML代码: 登录注册html: 登录成功html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <h1>登录成功!</h1> </body> <…...

BUUCTF [MRCTF2020]Ez_bypass 1

题目环境&#xff1a;F12查看源代码 I put something in F12 for you include flag.php; $flagMRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}; if(isset($_GET[gg])&&isset($_GET[id])) { $id$_GET[id]; $gg$_GET[gg]; if (md5($id) md5($gg) && $id ! $gg) { …...

基于Apache部署虚拟主机网站

文章目录 Apache释义Apache配置关闭防火墙和selinux 更改默认页内容更改默认页存放位置个人用户主页功能基于口令登录网站虚拟主机功能基于ip地址相同ip不同域名相同ip不同端口 学习本章完成目标 1.httpd服务程序的基本部署。 2.个人用户主页功能和口令加密认证方式的实现。 3.…...

大数据平台/大数据技术与原理-实验报告--部署全分布模式HBase集群和实战HBase

实验名称 部署全分布模式HBase集群和实战HBase 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.11.07-2023.11.10 实验仪器设备以及实验软硬件要求 专业实验室&#xff…...

手写字符识别神经网络项目总结

1.数据集 手写字符数据集 DIGITS&#xff0c;该数据集的全称为 Pen-Based Recognition of Handwritten Digits Data Set&#xff0c;来源于 UCI 开放数据集网站。 2.加载数据集 import numpy as np from sklearn import datasets digits datasets.load_digits() 3.分割数…...

八、Lua数组和迭代器

一、Lua数组 数组&#xff0c;就是相同数据类型的元素按一定顺序排列的集合&#xff0c;可以是一维数组和多维数组。 在 Lua 中&#xff0c;数组不是一种特定的数据类型&#xff0c;而是一种用来存储一组值的数据结构。 实际上&#xff0c;Lua 中并没有专门的数组类型&#xf…...

平凯星辰 TiDB 获评 “2023 中国金融科技守正创新扬帆计划” 十佳优秀实践奖

11 月 10 日&#xff0c;2023 金融街论坛年会同期举办了“第五届成方金融科技论坛——金融科技守正创新论坛”&#xff0c;北京金融产业联盟发布了“扬帆计划——分布式数据库金融应用研究与实践优秀成果”&#xff0c; 平凯星辰提报的实践报告——“国产 HTAP 数据库在金融规模…...

运算符展开、函数,对象,数组,字符串变化 集合

... 展开运算符 用于函数实参或者赋值号右边 console.log(...[1, 2, 3]) // 1,2,3console.log(Math.max(...[1, 2, 3]))//3 console.log(Math.max.apply(null, [1, 2, 3]))//3const o { a: 1, b: 2 }const obj { ...o, c: 3 }console.log(obj)//Object ... 剩余运算符 用于…...

NI自动化测试系统用电必备攻略,电源规划大揭秘

就像使用电脑之前需接通电源一样&#xff0c;自动化测试系统的电源选择也是首当其冲的问题&#xff0c;只不是这个问题更复杂。 比如&#xff0c;应考虑地理位置因素&#xff0c;因为不同国家或地区的公共电网所提供的线路功率有所不同。在电源布局和设备选型方面&#xff0c;有…...

ky10 server arm 在线编译安装openssl3.1.4

在线编译脚本 #!/bin/shOPENSSLVER3.1.4OPENSSL_Vopenssl versionecho "当前OpenSSL 版本 ${OPENSSL_V}" #------------------------------------------------ #wget https://www.openssl.org/source/openssl-3.1.4.tar.gzecho "安装OpenSSL${OPENSSLVER}...&q…...

外网IP和内网IP的区别

首先得先知道什么是ip地址&#xff0c;它就是唯一标识连接网络的设备的&#xff0c;即IP地址充当了设备在网络中的“住址”&#xff0c;使得设备能够相互通信和交换数据。 我们常听开发人员说外网内网&#xff0c;那么它们有什么区别呢&#xff1f; 外网可以理解为互联网&…...

Jquery动画特效

1&#xff0c;Jquery提供的特效方法 2&#xff0c;实例代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...

Tableau连接到mysql数据库,配置驱动

Tableau想要连接mysql数据库进行数据的可视化&#xff0c;但是没有ODBC驱动&#xff0c;看了几篇文章写的&#xff0c;不是很清楚&#xff0c;顺便写下自己的思路。 1、下载mysql对应的ODBC驱动 首先要知道自己mysql的版本&#xff0c;然后下载对应的ODBC驱动。 MySQL :: Dow…...

HuggingFace学习笔记--AutoModel的使用

1--AutoModel的使用 官方文档 AutoModel 用于加载模型&#xff1b; 1-1--简单Demo 测试代码&#xff1a; from transformers import AutoTokenizer, AutoModelif __name__ "__main__":checkpoint "distilbert-base-uncased-finetuned-sst-2-english"t…...

Kafka常见面试问题

1、Kafka分区设计及主副本如何同步 Apache Kafka是一种分布式流处理平台&#xff0c;它使用分布式复制协议来实现高可用性和容错性。在Kafka中&#xff0c;每个主题&#xff08;topic&#xff09;都有一个或多个分区&#xff08;partition&#xff09;&#xff0c;每个分区都有…...

学习知识回顾随笔(远程连接MySQL|远程访问Django|HTTP协议|Web框架)

文章目录 如何远程连接MySQL数据库1.创建用户来运行&#xff0c;此用户从任何主机连接到mysql数据库2.使用IP地址来访问MySQL数据库 如何远程访问Django项目Web应用什么是Web应用应用程序的两种模式Web应用程序的优缺点 HTTP协议&#xff08;超文本传输协议&#xff09;简介HTT…...

一、TIDB基础

官方文档&#xff1a;TiDB 产品文档 | PingCAP 文档中心 TIDB整个逻辑架构跟MYSQL类似&#xff0c;如下&#xff1a; TIDB集群&#xff1a;相当于MYSQL的数据库服务器&#xff0c;区别是MYSQL数据库服务器为单进程的&#xff0c;TIDB集群为分布式多进程的。 数据库&#xff…...

CW大鹏无人机地面站智能航线规划实战指南

1. 认识CW大鹏无人机地面站 第一次接触CW大鹏无人机地面站时&#xff0c;我被它强大的功能震撼到了。这不仅仅是一个简单的遥控软件&#xff0c;而是一个完整的飞行任务指挥中心。通过地面站&#xff0c;我们可以完成从航线规划到飞行监控的全流程操作&#xff0c;特别适合农业…...

SEATA分布式事务——AT模式本

简介 AI Agent 不仅仅是一个能聊天的机器人&#xff08;如普通的 ChatGPT&#xff09;&#xff0c;而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统&#xff0c;更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料&#xff0c;agent的…...

nRF52840 BLE 多服务开发中的 NRF_ERROR_NO_MEM 排查与解决实战

问题现象 在基于 nRF5 SDK 的 Heart Rate 示例上添加自定义 LBS&#xff08;LED Button Service&#xff09;私有服务后&#xff0c;程序启动后立即进入 Fatal Error → System Reset 循环&#xff0c;串口反复打印&#xff1a; textapp: ble_lbs_init failed! Error code 0x0…...

GB/T28181设备接入WVP平台保姆级教程:从海康到大华的配置避坑指南

GB/T28181设备接入WVP平台实战指南&#xff1a;海康/大华/宇视全品牌配置解析 第一次接触GB/T28181协议时&#xff0c;我盯着设备ID和SIP服务器配置页面发呆了半小时——这些看似简单的字段背后藏着太多细节陷阱。本文将用真实项目经验&#xff0c;带你拆解不同品牌设备在WVP平…...

再次革新 .NET 的构建和发布方式(一)靡

本文能帮你解决什么&#xff1f; 1. 搞懂FastAPI异步&#xff08;async/await&#xff09;到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑&#xff08;比如阻塞操作、数据库连接池耗尽、GIL限制&#xff09;。 …...

喔去,litellm 竟然被投毒了,赶紧检查你的机器中招了没有驴

一、什么是setuptools&#xff1f; setuptools 是一个用于创建、分发和安装 Python 包的核心库。 它可以帮助你&#xff1a; 定义 Python 包的元数据&#xff08;如名称、版本、作者等&#xff09;。 声明包的依赖项&#xff0c;确保你的包能够正确运行。 构建源代码分发包&…...

手机号逆向查询QQ号:Python开发者的高效查询解决方案

手机号逆向查询QQ号&#xff1a;Python开发者的高效查询解决方案 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾在工作中需要快速验证手机号与QQ号的绑定关系&#xff1f;面对批量数据时&#xff0c;手动查询不仅耗时耗力&…...

实测分享:麦橘超然Flux镜像在RTX 3060上的完整体验,附详细参数

实测分享&#xff1a;麦橘超然Flux镜像在RTX 3060上的完整体验&#xff0c;附详细参数 作为一名长期在中端显卡上折腾AI绘画的技术爱好者&#xff0c;当我第一次听说麦橘超然Flux镜像能在RTX 3060上流畅运行时&#xff0c;内心是持怀疑态度的。毕竟&#xff0c;大多数主流AI绘…...

利用FileZilla高效获取武汉大学IGS数据中心GNSS数据的完整指南

1. FileZilla软件准备与基础配置 第一次接触GNSS数据下载的朋友可能会觉得流程复杂&#xff0c;其实只要选对工具&#xff0c;操作比想象中简单得多。FileZilla作为老牌FTP客户端&#xff0c;就像数据下载界的"瑞士军刀"&#xff0c;我用它处理GNSS数据下载已有五年…...

XScene-UEPlugin技术集成实战:从高斯泼溅模型导入到性能优化的完整解决方案

XScene-UEPlugin技术集成实战&#xff1a;从高斯泼溅模型导入到性能优化的完整解决方案 【免费下载链接】XScene-UEPlugin A Unreal Engine 5 (UE5) based plugin aiming to provide real-time visulization, management, editing, and scalable hybrid rendering of Guassian …...