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

进程与线程的区别与联系

        多进程已经可以很好的实现并发编程的效果了,但是仍然有一个明显的缺点:进程太重了,进程消耗的资源更多,速度更慢。如果进程创建销毁不频繁,那么还好,一旦需要大规模创建和销毁进程,开销就比较大,需要给进程分配给进程分配资源。那么能不能只分配一个简单的pcb。而不去分配后续的这些内存硬盘资源呢?这样应该可以更快,既能够并发的执行任务,又能够提升创建开销的速度,这样的进程称为轻量级进程,也称为线程。

        但是不分配给线程资源,那么线程是否能运行起来呢?当然不能,没有如内存等资源,线程也无法执行任务,那么这不是说线程没有什么用呢?或者应该如何去解决这个问题呢?其实这个问题早就被大佬所发现并解决,创建进程时,先把要用到的计算机资源分配好,后续在创建线程时,让线程在进程内部被创建出来后续进程中的线程,直接复用进程这里创建好的资源就行,因此进程和线程间的关系,可以认为是进程包含了线程。其实,一个进程,至少要包含一个线程,最初创建的进程,可以视为只包含一个线程的进程,此时创建的过程需要分配资源,第一个线程创建开销可能比较大。后续再在这个进程里创建线程,就可以省略资源的过程。如睡单间变成睡宿舍。因此这个进程中的多个线程,共同复用了进程中的各种资源(内存,硬盘等),但是这些线程各自独立的在CPU上进行调度。因此,线程就可以既能够完成并发编程的效果,又可以比较轻量的方式来运行。

        与进程一样,线程同样是通过PCB来描述(Windows上,描述进程和线程是不同的结构体,但在Linux上,复用了PCB这个结构体来描述线程,此时,一个PCB对应一个线程,多个PCB对应一个进程,),不过PCB中的内存指针 文件描述符表,同一个进程的多个PCB中,这两字段的内容都是一样的,但是上下文,状态,优先级,记账信息等支持调度的属性,则这些PCB每个PCB的都不一样,就和睡宿舍一样,所有人共用一个空间,但每个人也有着自己的私人物品,线程在进程中也是一样,同一个进程中PCB中的内存指针和文件描述符表是公共的,但也有着专属于自己的东西。所以可以说,进程是操作系统进行资源分配的基本单位,线程是操作系统进行调度执行的基本单位。

        随着进程中线程的数量增加,整体的效率也会进一步的提高,但这个提高也不是无限的提高,当线程的数量过多时,效率就没有办法提升,甚至线程的调度会拖累整体的效率。说了这么多线程的优点,是不是说明线程比进程更好呢?其实不然,因为线程是在进程中创建与调用,那么如果多个线程之间有了冲突,这可能导致该线程无法完成任务,甚至导致整个进程都无法完成任务了,也就带来了线程安全问题,而进程间却有隔离性,它们之间互不干扰,避免了因一个进程有错误而导致其他的进程无法顺利进行。因此多线程编程和多进程编程相比,确实是有优势(更轻量,创建销毁速度更快),但也有缺点(不像进程那么稳定,容易被其他线程干扰)。

        总结,进程和线程的区别和联系是:

1)进程包含线程,都是为了实现并发编程的方式,线程比进程更轻量。

2)进程是操作系统进行资源分配的基本单位,线程是操作系统进行调度执行的基本单位。创建进程的时候把分配资源(虚拟地址空间,文件描述符表)的工作给做了,后续创建线程,直接共用之前的资源即可。

3)进程有独立的地址空间,彼此之间不会相互影响到,进程的独立性(系统稳定性)

多个线程共用一份地址空间,一个线程一旦抛出异常,就可能导致整个进程异常结束。(多个线程之间容易相互影响)

相关文章:

进程与线程的区别与联系

多进程已经可以很好的实现并发编程的效果了,但是仍然有一个明显的缺点:进程太重了,进程消耗的资源更多,速度更慢。如果进程创建销毁不频繁,那么还好,一旦需要大规模创建和销毁进程,开销就比较大…...

使用gadl对土地利用栅格重分类

要使用Python语言进行土地利用栅格的重分类,可以使用gadl库(GDAL的Python绑定)来实现。gadl库提供了一组功能强大的函数和类,可用于读取、处理和分析栅格数据。 首先,确保已经安装了gadl库。可以使用以下命令通过pip进…...

SQL-每日一题【1141. 查询近30天活跃用户数】

题目 活动记录表:Activity 请写SQL查询出截至 2019-07-27(包含2019-07-27),近 30 天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。 以 任意顺序 返回结果表。 查询结果示例如下。…...

Java小型操作系统模拟(采用策略模式结合反射进行搭建,支持一些简单的命令)

Java小型操作系统模拟 项目说明第一阶段:反射结合策略模式搭建基本的命令结构第二阶段:注解结合反射与策略模式,将结构进一步规范第三阶段:开启新的窗口,将控制台输入切换到新窗口中,同时创建右键菜单&…...

VsCode与Idea编辑器更换背景图

目录 VsCode Idea VsCode 需要安装background插件 安装完成后,打开设置,搜索background 然后就可以在json文件进行图片设置,透明度等等 Idea 打开File -> Settings 然后找到Appearance , 往下滑,找到BackGround …...

Visual Studio 快捷键

记录一下VS的快捷键,用Xcode几个星期后回到VS一下子有点乱,还好有条件反射在,过了会就都恢复了 目录 跳转快捷键查找快捷键编辑快捷键代码折叠书签操作记忆来源VS一定要装VAssistX插件,下面的快捷键部分是VX提供的。 跳转快捷键 快速打开文件 Alt + Shift + O 快速打开对…...

IT技术面试中常见的问题及解答技巧

在IT技术面试中,面试官常常会问到一些常见的问题,针对这些问题,我们可以充分准备和提前准备一些解答技巧。下面我将分享一些我个人的经验和观察,希望对大家有所帮助。 请介绍一下你的项目经验。 在回答这个问题时,我们…...

Java使用hive连接kyuubi

一、Maven依赖 <dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>2.3.9</version> </dependency> 二、相关配置信息 驱动类&#xff1a;org.apache.hive.jdbc.HiveDriver连接UR…...

性能测试基础知识(三)性能指标

性能测试基础知识&#xff08;三&#xff09;性能指标 前言一、时间特性1、响应时间2、并发数3、吞吐量&#xff08;TPS&#xff09; 二、资源特性1、CPU利用率2、内存利用率3、I/O利用率4、网络带宽使用率5、网络传输速率&#xff08;MB/s&#xff09; 三、实例场景 前言 性能…...

【 Redis】的乱码问题

问题描述&#xff1a; 使用RedisTemplate存储的数据&#xff0c;在 redis-cli 客户端查看时&#xff0c;key 和 value 都会携带类似\xac\xad\这样的字符串。 原因&#xff1a; 由于默认使用了 jdk 的序列化方式。以下是支持的序列化方式 项目一般都会有缓存&#xff0c;常常…...

虚拟机安装的问题

CentOS7报错: Host SMBus Controller not enabled! 1.在上图界面中直接输入root用户的密码登录到系统 2.输入命令&#xff0c;lsmod | grep i2c 3.输入命令&#xff0c;vi /etc/modprobe.d/blacklist.conf 创建黑名单&#xff0c;添加以下内容&#xff1a; blacklist i2c_piix…...

seldom之数据驱动

seldom之数据驱动 如果自动化某个功能&#xff0c;测试数据不一样而操作步骤是一样的&#xff0c;那么就可以使用参数化来节省测试代码。 seldom是我在维护一个Web UI自动化测试框&#xff0c;这里跟大家分享seldom参数化的实现。 GitHub&#xff1a;GitHub - SeldomQA/seld…...

设计模式:生成器模式

这个模式书上讲的比较简单&#xff0c;但是感觉精华应该是讲到了。 引用下其它博客的总结&#xff1a;生成器模式的核心在于分离构建算法和具体的构造实现&#xff0c;从而使得构建算法可以重用。 【设计模式】建造者模式_鼠晓的博客-CSDN博客...

Gradle同步任务一直不动问题(非网络情况)

最近更新ComposeViews的Kotlin和Compose版本,升级到Kotlin1.9和Compose1.4.3时遇见一个问题,Gradle同步时始终会卡在一个位置,同步了一晚上也没用 然后又试了两次还是不行,猜测可能是Gradle的问题,于是使用命令行进行同步,并打印debug日志 ./gradlew -debug -refresh-dependen…...

STM32使用HAL库BH1750光照度传感器

开发环境 单片机&#xff1a;STM32F103C8T6 光照度传感器&#xff1a;BH1750 IDE&#xff1a;KEILSTM32CUBEMX 单片机配置 1、STM32CUBEMX BH1750代码 1、头文件 /* ************************************************* BH1750光照数据计算&#xff08;LUX&#xff09; …...

qt代码练习

计时器练习 namespace Ui { class third; }class third : public QWidget {Q_OBJECTpublic:explicit third(QWidget *parent nullptr);~third();QLabel *labth1 new QLabel(this);QTextEdit *txtth1 new QTextEdit("闹钟",this);QLineEdit *leth1 new QLineEdit(t…...

PoseiSwap:首个基于模块化设施构建的订单簿 DEX

在前不久&#xff0c;PoseiSwap 曾以1000万美元的估值&#xff0c;获得了来自于ZebecLabs基金会的150万美元的融资。此后 PoseiSwap 又以2500万美元的估值&#xff0c;从GateLabs、EmurgoVentures、Republic以及CipholioVentures等行业顶级投资机构中&#xff0c;获得了新一轮未…...

Linux NameSpace 虚拟化 资源隔离

NameSpace NameSpace介绍 在操作系统中命名空间命名空间提供的是系统资源的隔离&#xff0c;其中系统资源包括了&#xff1a;进程、网络、文件系统等等 实际上linux系统实现命名空间主要目的之一就是为了实现轻量级虚拟化服务&#xff0c;也就是我们说的容器&#xff0c;在同…...

【Android Framework系列】第9章 AMS之Hook实现登录页跳转

1 前言 前面章节我们学习了【Android Framework系列】第5章 AMS启动流程和【Android Framework系列】第6章 AMS原理之Launcher启动流程&#xff0c;大概了解了AMS的原理及启动流程&#xff0c;这一章节我们通过反射和动态代理对不同Android版本下的AMS进行Hook&#xff0c;实现…...

哪些行业需要连接云专线?

在诸多行业之中&#xff0c;有一些行业对数据安全性要求高、业务需要实时性、业务需求复杂&#xff0c;往往需要建立起私密、高速、安全的传输通道&#xff0c;云专线是他们经常采用的方案。具体来讲&#xff0c;都有哪些行业需要连接云专线呢&#xff1f;请见下方。 1、金融行…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

el-amap-bezier-curve运用及线弧度设置

文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 ‌el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。‌ 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...