java EE初阶 —进程与线程的区别

news2025/7/15 20:10:47

文章目录

  • 1.为什么会引入进程和线程的概念
  • 2.进程和线程的关系
    • 2.1 坤坤吃鸡演示进程和线程区别
      • 2.1.1 线程的安全问题
      • 2.1.2 线程的异常问题

1.为什么会引入进程和线程的概念

引入进程这个概念,最主要的目的是为了解决并发编程这样的问题。
CPU 已经进入了多核心的时代,要想进一步提高程序的执行速度,就需要充分利用 CPU D多核资源。

其实,多进程编程已经可以解决并发编程问题了,这说明已经可以利用起CPU资源了。
但是不好的地方是,进程太重了(消耗的资源多、速度慢

当创建一个进程、销毁一个进程、调度一个进程时,它的开销会比较大。
这里说的太重了是指在资源分配和回收上执行的效率太慢了,消耗的资源多。


鉴于上面的情况,线程应运而生。
线程把申请资源释放资源的操作给省下来了。
在解决并发编程的前提下,让创建、销毁、调度的速度更快一些。
因此线程也叫 “轻量级进程”


举个例子来演示进程和线程概念:

现在有一个工厂要加工一些产品。


此时由于销量比较大,需要将厂子扩建一下。

有两种方案可选。

方案1:再租一块场地,在搞一套设备。


方案1就是多进程的方案


方案2:在原来的场地里,再搞一套生产设备线


方案2就是多线程的方案

很明显方案2要比方案1成本小很多,因为场地和物流体系都可以复用之前的。

此时,在搞第一套生产线的时候,需要吧资源申请到位。
后续追加新的生产线的时候,复用之前的资源即可。

由此可以看出,线程之间资源是共享的

2.进程和线程的关系

进程包含着线程

一个进程可以包含一个线程,也可以包含多个线程,但是不能没有。
只有第一个线程启动的时候开销是比较大的,后续的线程就省事了。
同一个进程里的多个线程之间,共用了进程的同一份资源。
这里的资源指的是,内存文件描述符表

  • 第一个线程创建的对象,进程里的其他线程可以直接使用。
  • 第一个线程打开的文件,其他的线程都可以直接使用。

如果一个进程有多个线程,每个线程是独立在CPU上调度的,即线程是操作系统调度的基本单位。
每个线程也都有自己的支持逻辑(执行流

2.1 坤坤吃鸡演示进程和线程区别


有一个坤坤要吃100只鸡


如果是采用多进程的方式吃鸡:

现在有两个坤坤,两个房间、两个桌子,此时的成本会比较高。


如果是采用多线程的方式吃鸡:

现在增加一只坤坤即可。


两只坤坤同时吃鸡,不需要增加桌子和房间,效率提升的同时成本也减少了。


按照上面的逻辑,如果让更多的坤坤吃鸡,速度岂不是更快吗?


增加线程数量的时候,也不是可以一直可以提升速度的!!!
桌子的空间是有限的(CPU的核心数量也是有限的
如果坤坤太多,大家挤来挤去,这就会导致正在吃的坤坤无法专心吃。

因此,线程太多,核心数目有限,不少的开销会浪费在线程调度上了。

2.1.1 线程的安全问题

多线程的情况下,多个坤坤共享一份鸡肉,此时就可能会打架。

大坤和小坤同时看上了一个一只鸡,都去吃,就可能会打起来。


在多进程中,不会出现这种情况,因为多进程里已经把鸡给分好了,自己吃自己的。

这就是线程的安全问题。(线程不安全)

2.1.2 线程的异常问题

大坤先把鸡给吃了,导致小坤吃不到了。小坤就会生气,你小坤哥就会把桌子掀了。

此时如果一个线程抛异常,如果处理不好,很可能把整个进程都给带走了。
其他的线程也就挂了。


多个执行流访问同一个共享资源的时候,就会有安全问题。

线程模型,天然就是资源共享的。
多线程争抢同一个资源(同一个变量),这时是非常容易触发安全问题的。

进程模型,天然是资源隔离的,不容易触发安全问题。
进行进程间通信的时候,多个进程访问同一个资源,可能就会出问题。

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

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

相关文章

【Keil】编译选项设置 Warning 为 error

死亡是一座永恒的灯塔,不管你驶向何方,最终都会朝它转。一切都将逝去,只有死神永生。 – 刘慈欣-《三体》 前言 众所周知,一般而言,编译程序过程中的 warning 警告并不会影响可执行文件的生成,只有 error …

JVM 垃圾回收器分类

目录 Serial收集器 Parnew收集器 Parallel Scavenge CMS收集器 G1收集器 Serial收集器 基本概念:Serial收集器是最基本、发展历史最久的收集器,这个收集器是采用复制算法的单线程的收集器。 重点:其采用复制算法和单线程。 单线程的收集…

01_SpringBoot简介及项目搭建

文章目录SpringBoot简介及项目搭建0x01_SpringBoot简介Spring优缺点springboot启动器0x02_Spring boot项目搭建方式1启动类和启动器的区别0x03_Spring boot项目搭建方式20x04_Spring boot项目搭建方式3(最推荐)SpringBoot简介及项目搭建 欢迎关注公众号…

MYSQL 数据库企业级架构演变史

从初级架构到中级架构原来有这么多次的升级,并且每一次的进阶都有其优缺点,文末还有对高级结构的理解,欢迎大家在评论区各抒己见~ MySQL简介 MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB公 司开发,…

【强化学习论文合集】AAAI-2021 强化学习论文

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现…

九、【React基础】组件的生命周期

文章目录1、旧生命周期1.1、单组件生命周期1.1.1、生命周期1.1.1.1、初始化阶段:由 ReactDOM.render() 触发---初次渲染1.1.1.2、更新阶段:由组件内部 this.setSate() 或父组件重新render触发1.1.1.3、卸载组件:由 ReactDOM.unmountComponent…

流媒体传输 - RTP 荷载 H264

H264 码流结构 H264 码流是由很多 NAL Unit 组成,所有 NAL Unit 均存在一个八位数据的 NAL Unit Header ,这八位数据也充当此 RTP 有效负载格式的有效负载头。一个 NAL Unit Header 的语法如下: ---------------|0|1|2|3|4|5|6|7|--------|F|NRI| Type…

深分页Scroll

ES对from size是有限制的,from和size二者之和不能超过1W 原理: fromsize在ES查询数据的方式: 第一步现将用户指定的关键进行分词。 第二步将词汇去分词库中进行检索,得到多个文档的id。 第三步去各个分片中去拉取指定的数据。耗…

JUC总结-基础篇

juc是什么? JUC是java.util.concurrent包的简称,在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题! juc脑图 juc总结 juc多数工具都是依赖volatile关键字保持可见性和禁止指…

ovs vxlan 时延和吞吐

设计云时到底要不要用vxlan,如果用vxlan到底要不要购买比较贵的smart nic做offload,采用软件vxlan还是硬件交换机vxlan,很难决策,这儿简单测试一下,给个参考,资源终究是有限的,成本还是有考虑的…

Flutter splash 屏幕

Flutter splash 屏幕 原文 https://medium.com/bedirhanssaglam/flutter-splash-screen-a8cafec52c8e 前言 启动画面通常被特别大的应用程序用来通知用户程序正在加载过程中。它们提供的反馈表明,一个漫长的过程正在进行中。有时,启动画面中的进度条会指…

【MYSQL】在线恢复主从复制方案

一、恢复前提 因复杂情况,从库无法从binlog中恢复主从复制关系,需要从备份文件中恢复。恢复过程的几个关键点为: 1、从库现有数据的清理。本方案采用覆盖的方式,导出时添加add-drop参数即可。还有一个方案是手动删除数据文件&…

1990-2021年全国各省外商直接投资水平

1990-2021年全国各省外商直接投资水平 1、包括全国30省,不含西藏 2、指标包括: 行政区划代码、长江经济带、年份、地区、经度、纬度、GDP(亿元)、外商直接投资(美元)(万美元)、人民币对美元汇率(美元1)(元)、外商直接投资(万元)、外商直接投资水平 3、…

第三章:CompletableFuture

Future接口复习FutureTask 实现类Future 编码的优缺点优点缺点get() 方法导致阻塞isDone() 轮询总结CompletableFutureCompletableFuture 为什么会出现?CompletableFuture 架构图CompletionStageCompletableFuture 四个静态方法CompletableFuture 减少阻塞和轮询注意…

Elasticsearch 8.4.1 配置自签名证书和启用Https

一、背景 某次安全扫描过程中,发现环境存在【SSL证书不可信】和【SSL自签名证书】漏洞;漏洞描述: 此服务的X.509证书链未由认可的证书颁发机构签名。如果远程主机是生产中的公共主机,这将取消SSL的使用,因为任何人都可…

干货分享:超级浏览器使用感受

在亚马逊做工艺品时间挺长的了,来说说我这几年使用超级浏览的感受。 现在做跨境的就跟做国内的电商平台一样卷了,不仅产品要新奇独特、要包邮价格还要有优势,可以说以前跨境电商是卖方市场,现在已经妥妥变成买方市场了。但这是国际…

python基础之模块与列表

文章目录一、模块模块名也是一个标识符二、列表高级变量类型:在python中,所有非数字型变量都支持以下特点:列表的定义:列表函数使用:关键字、函数和方法科普:列表的迭代 遍历:一、模块 模块是p…

一文了解 Go 中的指针和结构体

一文了解 Go 中的指针和结构体前言指针指针的定义获取和修改指针所指向变量的值结构体结构体定义结构体的创建方式小结耐心和持久胜过激烈和狂热。 前言 前面的两篇文章对 Go 语言的基础语法和基本数据类型以及几个复合数据类型进行介绍,本文将对 Go 里面的指针和结…

机器学习-(手推)线性回归-最小二乘法(矩阵表达)、几何意义

一、最小二乘法(矩阵表达)误差平均分散每个样本 如下数学推到过程(手推!!!): 数据介绍: D{(x1,y1),(x2,y2),......(xn,yn), Xi(P维列向量&…

行列向量的维数和个数的关系【三秩相等作为桥梁】

前置知识 1.列向量组维数增加时,向量组的极大无关组增加(或不变)。 2. 三秩相等 向量组证明 直观证明 这两个列向量显然是相关的。 这两个列向量当a和b取k和2k的时候相关(k为任意常数),当不是k和2k的时…