Java面试题——进程和线程的关系

news2024/10/6 4:14:25

并发编程

很早以前的计算机上只能执行一个程序,在该程序执行时,下一个执行流只能等待该程序执行结束,我们认为这种依次执行的方式十分浪费资源且效率低下(因为一个程序执行只会消耗计算机的部分资源,其他资源同一时刻得不到充分利用),所以后来引入了并发编程(在宏观上,计算机可以同时执行多个程序)。

多进程和多线程的引入

为了可以很好的进行并发编程操作,引入了多进程操作;进程是操作系统分配资源的基本单位,进程一定的解决了并发编程的操作,但是多进程相对于多线程来说又显得“更重”,(这里的重体现在创建,销毁,调度一个进程的开销更大),多进程在资源分配和回收上不如多线程

多进程和多线程的关系

  1. 进程包含线程,一个进程至少包含一个线程(也称作主线程)
  2. 多进程创建,销毁和调度一个进程的开销更大(主要体现在资源分配和回收上);
    举一个例子:
    假设有一个工厂通过购入材料进行生产然后卖出设备,该工厂有一个完整的货物运输渠道和一个完整的生产线,如图所示:
    在这里插入图片描述
    假设工厂的生意很好,原来的单一生产线已经供不应求需要扩充,现在有两套方案
    方案一:创建一个新的共产,对原来的物流渠道和生产线都进行1:1的扩充,如图所示:
    在这里插入图片描述
    方案二:在原来的工厂内直接加一个完整的生产线,如图所示:
    在这里插入图片描述
    总结:
    其中方案一对应了多进程的操作,方案二对应了多线程的操作,方案一不仅在原有的基础上加入了生产线加入了新的物流渠道同时也创建了新的工厂,方案二保留了原来的物流渠道和工厂,仅仅加入了一个新的生产线,所以方案二相对于方案一来说省下了很多的开销;对应到操作系统中,多线程只需要第一次创建线程的时候需要向系统申请资源即可,后来创建的线程都是可以重复利用第一份资源,多进程则每一次创建进程时都需要再次申请资源(申请资源也需要花费时间),故开销更大
  3. 通过举得这个例子也可以看出进程与进程之间资源几乎不共享,同一个进程下面的线程与线程之间资源是共享的
  4. 进程是操作系统分配资源的基本单位,线程是操作系统调度的基本单位,故以后说到调度都指的是对线程的操作;
  5. 线程使用PCB来描述的,同一个进程下面的线程的pid是相同的

多线程可能存在的问题

举一个例子:滑稽老铁吃烤鸡(每一个滑稽老铁代表一个线程,烤鸡代表他们所共享的资源)

  1. 增加线程数量会不会提高效率,如图所示:
    在这里插入图片描述
    我们发现一直增加滑稽老铁数量时,此时桌子已经坐不下了,对应到操作系统中,CPU的核心是有限的,CPU调度线程需要时间开销,线程太多的情况往往会因为开销太大降低效率,同时创建线程也需要消耗很多资源,太多的线程会吃满系统的带宽
  2. 假设滑稽老铁1号和2号同时看上了鸡大腿,都伸手去拿,可能会打起来,线程1和线程2都会崩溃,而在多进程的时候不会出现这种情况(因为每个进程所享受的资源CPU提前已经分配好l);
  3. 假设滑稽老铁1号抢走了鸡大腿,滑稽老铁2号生气掀桌了,造成后面的滑稽老铁什么都没吃到,此时整个进程里的所有线程都会崩溃。

总结:
多线程相对于多进程来说提高了效率,但是多线程可能存在的线程安全问题也更多,但是Java开发中我们会更多的选择多线程的模式,这就需要我们开发者写出合理的代码来避免线程安全问题的出现。

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

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

相关文章

对 Masa.Blazor.Maui.Plugin.GeTuiPushBinding 项目的引用

新建一个 MAUI Blazor 项目:Masa.Blazor.Maui.Plugin.GeTuiSample, 添加对 Masa.Blazor.Maui.Plugin.GeTuiPushBinding 项目的引用 1、初始化个推 SDK 个推 SDK 的初始化在 MainActivity.OnCreate () 或 MainApplication.OnCreate () 方法中都是可以的&#xff0c…

使用Docker+Jenkins+Gitee自动化部署SpringBoot项目

目录搭建基础环境1、使用Docker-Compose搭建基础环境2、搭建项目仓库环境,创建Dockerfile文件3、配置Jenkins3.1、初始化Jenkins3.2、安装核心插件3.3、全局工具配置3.3.1、配置Git。3.3.2、配置Maven3.3.3、配置JDK3.4、配置Git凭证3.5、构建项目3.5.1、配置源码管…

Docker教程(centos下安装及docker hello world)

Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何…

STC51单片机38——按键控制舵机连续运动,稳定不抖动

仿真: //开发板按钮K3和K4,舵机信号线P27 //程序为12m晶振,开发板为11.0592M #include"reg52.h" #define u8 unsigned char #define u16 unsigned int sbit P27P2^7;//舵机信号线 sbit K3P3^2; //正偏转 sbit K4P3^3; //反偏…

我的大二web课程设计 使用HTML做一个简单漂亮的页面(纯html代码)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Flutter中GetX系列四--BottomSheet(底部弹框)

BottomSheet介绍 BottomSheet 是底部弹出的一个组件,常用于单选、验证码二次校验弹窗等,GetX的BottomSheet底部弹出是自定义通过路由push的方法实现底部弹窗的一个效果。 BottomSheet使用 我们可以通过GetX很轻松的调用bottomSheet(),而且…

HTML+CSS大作业:使用html设计一个简单好看的公司官网首页 浮动布局

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

web前端期末大作业:网站设计与实现——咖啡网站HTML+CSS+JavaScript

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

PMBOK史上最大的改版,你知道到底有什么精华嘛?

1、项目管理经典的5大过程组、10大知识领域和49个过程(第六版)的结构彻底被改变,取而代之的是项目管理12大原则和8大绩效域组成的全新结构; 2、项目管理标准顺应趋势,从基于过程(Process-based&#xff09…

AI+保险,打造让投保人“叫绝”的服务方式

近年来,信息技术在保险领域的应用越来越广泛,在稳步推进保险业务的线上化与智能化的同时,也让保险服务覆盖率有了极大的提升。然而,保险业服务在智能化转型方面仍面临着诸多挑战。 咨询热线统一接入,客户来电不遗漏 保险企业客户不仅体量大…

人类真的与恐龙无缘见面吗?看看雕刻和绘画怎样说

人类真的与恐龙无缘见面吗?看看雕刻和绘画怎样说 恐龙的形象经常出现在电影、电视和网络动画。它们庞大的身躯、凶猛的样子都让人留下深刻的印象。 但是我们今天看到的恐龙都只是出现在屏幕或书籍中,还有在博物馆内恐龙的模型或骨架,那历史上…

计算机考研,我不建议考408

这篇文章是抖音和b站上上传的同名视频的原文稿件,感兴趣的csdn用户可以关注我的抖音和b站账号(GeekPower极客力量)。同时这篇文章也为视频观众提供方便,可以更加冷静地分析和思考。文章同时在知乎发表。欢迎大家的留言。 b站视频链…

【计算机毕业设计】22.学校试卷生成系统+vue

一、系统截图(需要演示视频可以私聊) 摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的…

三维重建之NeRF(pytorch)

神经辐射场(NeRF)是一个简单的全连接网络(权重约为5MB),经过训练,可以使用渲染损失再现单个场景的输入视图。网络直接从空间位置和观看方向(5D输入)映射到颜色和不透明度&#xff08…

为dev c++配置图形开发环境easyx

easyx广泛支持VC6~C2022,并且在VC中配置十分容易,点击安装一个按钮搞定。但配置dev C则难度要大很多。这里我们来详细讲述配置过程。笔者也是经过几次尝试才配置成功,希望给试图在dev上配置easyx的童鞋带来帮助。 1、下载easyX 第一步就不用说了&#…

【强化学习论文合集】ICML-2022 | 人工智能 CCF-A类会议(附链接)

第39届国际机器学习会议(International Conference on Machine Learning, ICML 2022)于北京时间7月17日至7月23日,在美国马里兰州巴尔的摩市以线上线下结合的方式举办。 [1]. EAT-C: Environment-Adversarial sub-Task Curriculum for Efficient Reinforcement Learning.[2]…

接口测试 - 从0不到1的心路历程

我是一名做了三年测试的tester,2020年以功能测试工程师的身份入职北京一家医疗培训公司,入职后为了提高测试效率,接触到接口测试,以下是从零到现在 (还有很大完善的空间,所以不能算是1) 的一些心路历程。 做接口测试的…

学生HTML个人网页作业作品——湘菜美食网页设计作品(12页) 美食网站设计与实现

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

图解LeetCode——1742. 盒子中小球的最大数量(难度:简单)

一、题目 你在一家生产小球的玩具厂工作,有 n 个小球,编号从 lowLimit 开始,到 highLimit 结束(包括 lowLimit 和 highLimit ,即 n highLimit - lowLimit 1)。另有无限数量的盒子,编号从 1 到…

【JavaWeb】第五章 jQuery(中篇)

🍁【JavaWeb】第五章 jQuery(上篇) 文章目录9、内容过滤选择器10、属性过滤选择器11、表单过滤器12、元素的筛选13、jQuery属性操作之html()、text()、val()方法14、jQuery属性操作之attr()和prop()9、内容过滤选择器 1)&#xf…