进程与线程的区别与联系
多进程已经可以很好的实现并发编程的效果了,但是仍然有一个明显的缺点:进程太重了,进程消耗的资源更多,速度更慢。如果进程创建销毁不频繁,那么还好,一旦需要大规模创建和销毁进程,开销就比较大,需要给进程分配给进程分配资源。那么能不能只分配一个简单的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> 二、相关配置信息 驱动类:org.apache.hive.jdbc.HiveDriver连接UR…...
性能测试基础知识(三)性能指标
性能测试基础知识(三)性能指标 前言一、时间特性1、响应时间2、并发数3、吞吐量(TPS) 二、资源特性1、CPU利用率2、内存利用率3、I/O利用率4、网络带宽使用率5、网络传输速率(MB/s) 三、实例场景 前言 性能…...
【 Redis】的乱码问题
问题描述: 使用RedisTemplate存储的数据,在 redis-cli 客户端查看时,key 和 value 都会携带类似\xac\xad\这样的字符串。 原因: 由于默认使用了 jdk 的序列化方式。以下是支持的序列化方式 项目一般都会有缓存,常常…...
虚拟机安装的问题
CentOS7报错: Host SMBus Controller not enabled! 1.在上图界面中直接输入root用户的密码登录到系统 2.输入命令,lsmod | grep i2c 3.输入命令,vi /etc/modprobe.d/blacklist.conf 创建黑名单,添加以下内容: blacklist i2c_piix…...
seldom之数据驱动
seldom之数据驱动 如果自动化某个功能,测试数据不一样而操作步骤是一样的,那么就可以使用参数化来节省测试代码。 seldom是我在维护一个Web UI自动化测试框,这里跟大家分享seldom参数化的实现。 GitHub:GitHub - SeldomQA/seld…...
设计模式:生成器模式
这个模式书上讲的比较简单,但是感觉精华应该是讲到了。 引用下其它博客的总结:生成器模式的核心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用。 【设计模式】建造者模式_鼠晓的博客-CSDN博客...
Gradle同步任务一直不动问题(非网络情况)
最近更新ComposeViews的Kotlin和Compose版本,升级到Kotlin1.9和Compose1.4.3时遇见一个问题,Gradle同步时始终会卡在一个位置,同步了一晚上也没用 然后又试了两次还是不行,猜测可能是Gradle的问题,于是使用命令行进行同步,并打印debug日志 ./gradlew -debug -refresh-dependen…...
STM32使用HAL库BH1750光照度传感器
开发环境 单片机:STM32F103C8T6 光照度传感器:BH1750 IDE:KEILSTM32CUBEMX 单片机配置 1、STM32CUBEMX BH1750代码 1、头文件 /* ************************************************* BH1750光照数据计算(LUX) …...
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
在前不久,PoseiSwap 曾以1000万美元的估值,获得了来自于ZebecLabs基金会的150万美元的融资。此后 PoseiSwap 又以2500万美元的估值,从GateLabs、EmurgoVentures、Republic以及CipholioVentures等行业顶级投资机构中,获得了新一轮未…...
Linux NameSpace 虚拟化 资源隔离
NameSpace NameSpace介绍 在操作系统中命名空间命名空间提供的是系统资源的隔离,其中系统资源包括了:进程、网络、文件系统等等 实际上linux系统实现命名空间主要目的之一就是为了实现轻量级虚拟化服务,也就是我们说的容器,在同…...
【Android Framework系列】第9章 AMS之Hook实现登录页跳转
1 前言 前面章节我们学习了【Android Framework系列】第5章 AMS启动流程和【Android Framework系列】第6章 AMS原理之Launcher启动流程,大概了解了AMS的原理及启动流程,这一章节我们通过反射和动态代理对不同Android版本下的AMS进行Hook,实现…...
哪些行业需要连接云专线?
在诸多行业之中,有一些行业对数据安全性要求高、业务需要实时性、业务需求复杂,往往需要建立起私密、高速、安全的传输通道,云专线是他们经常采用的方案。具体来讲,都有哪些行业需要连接云专线呢?请见下方。 1、金融行…...
PangoDesign Suite与Modelsim协同仿真:从库编译到实战排错全解析
1. 为什么需要PangoDesign Suite与Modelsim协同仿真 第一次接触FPGA仿真时,我也被各种专业术语绕晕了。直到某次项目出现时序问题,才发现仿真工具就像汽车的"安全气囊"——平时感觉不到存在,关键时刻能救命。PangoDesign Suite&…...
气体放电管实战指南:从关键参数到电路防护的精准匹配
1. 气体放电管:电路防护的"安全气囊" 第一次接触气体放电管时,我就被它简单却巧妙的设计所吸引。这玩意儿就像汽车的安全气囊——平时默默无闻,关键时刻却能救你一命。气体放电管(GDT)本质上是个陶瓷或玻璃…...
从分辨率、码率到蓝光:解码高清视频的三大核心要素
1. 分辨率:高清世界的基石 第一次接触高清视频时,我被商家宣传的"4K超清"搞得一头雾水。直到自己开始做视频剪辑才明白,分辨率就像织布的经纬线——它决定了画面能有多细腻。举个生活中的例子,1080P分辨率相当于用19201…...
终极指南:如何用Reset-Windows-Update-Tool快速修复Windows更新故障
终极指南:如何用Reset-Windows-Update-Tool快速修复Windows更新故障 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...
系统提示词工程:构建稳定可控的大语言模型应用实践
1. 项目概述与核心价值 最近在GitHub上看到一个挺有意思的项目,叫 edoardoavenia/chatgpt-system-prompts 。乍一看,这似乎又是一个收集ChatGPT提示词的仓库,但当你真正点进去,花点时间研究一下它的结构和内容,你会发…...
MLIR编译器技术:分层IR设计与AI加速实践
1. MLIR与编译器技术概述 编译器技术作为计算机科学的基础设施,长期以来扮演着将高级语言转换为机器码的关键角色。传统编译器如GCC、LLVM采用固定层次的中间表示(IR),这在通用计算时代表现良好。但随着AI和高性能计算领域对异构硬…...
抖音无水印视频下载神器:3分钟快速上手,轻松保存高清无水印视频
抖音无水印视频下载神器:3分钟快速上手,轻松保存高清无水印视频 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downlo…...
Astra Toolbox终极指南:如何快速掌握高性能GPU加速3D重建
Astra Toolbox终极指南:如何快速掌握高性能GPU加速3D重建 【免费下载链接】astra-toolbox ASTRA Tomography Toolbox 项目地址: https://gitcode.com/gh_mirrors/as/astra-toolbox 还在为复杂的CT重建算法而烦恼吗?想要让医学影像处理和工业检测的…...
如何一键修复Windows系统依赖问题:VisualCppRedist AIO终极解决方案指南
如何一键修复Windows系统依赖问题:VisualCppRedist AIO终极解决方案指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过打开游戏或…...
在扁平化组织里,技术人如何建立“非职权影响力”?
一、为什么测试人更需要非职权影响力软件测试工程师的岗位设置本身就带有一种结构性矛盾:你对产品质量负责,却很少拥有对等的决策权。开发写代码,你找bug;产品定需求,你验证逻辑;项目经理排期,你…...
