线程和进程的区别和联系

一、什么是进程

进程(Process), 是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行 【资源分配和调度】 的一个独立单位。

  • 进程是【程序】的【一次执行】(是计算机中程序的执行过程,而不是计算机中的程序)
  • 进程是系统进行【资源分配和调度】的一个【基本】单位。

二、进程的特征

  • 动态性:由创建而生,由撤销而亡
  • 并发性:多个进行同时运行
  • 独立性:独立资源分配
  • 异步性:相互独立、互不干扰

三、什么是线程

  • 一个线程就是一个指令流,将指令集合中的一条条的指令以一定的顺序交给CPU去执行。
  • 线程指的是进程中一个单一顺序的控制流。
  • 线程是进程中真正执行任务的基本单位。
    线程是操作系统进行运算调度的最小单元,它是进程的子任务,用于保证程序的实时性,实现进程内部的并发,它不能独立拥有系统资源,但它可与同属一个进程的其他线程共享该进程所拥有的全部资源。

四、线程和栈的关系

对于学过JVM的同学来说,我们java要执行的指令都是放在虚拟机栈当中,通过指令的入栈出栈来实现程序的执行。
而线程是一个指令流,将栈当中的指令一定的顺序交给CPU去执行,是线程的执行过程。
在这里插入图片描述

五、线程和进程的关系

在这里插入图片描述

六、用代码去理解线程和进行

1.了解单线程

//首先我们新建一个类ThreadNew
public class ThreadNew {private int flag;public ThreadNew(int flag){this.flag = flag;}public void run(){if(flag == 1){for (int i= 0;i<1000000;i++){System.out.println("执行任务1");}}else {for (int i= 0;i<1000000;i++){System.out.println("执行任务2");}}}
}
public static void main(String[] args) {ThreadNew t1 = new ThreadNew(1);ThreadNew t2 = new ThreadNew(2);t1.run();t2.run();System.out.println("我是主方法,我是来测试顺序的");
}

输出:
我们的输出是首先输出“执行任务1”,输出完毕之后;其次执行“执行任务2”,输出完毕之后;最后输出“我是主方法,我是来测试顺序的”。

这样输出的原因在于我们的程序,main方法首先入栈,main()当中的程序依次执行,首先创建t1和t2两个对象。之后t1对象调用自己的run()方法入栈,根据条件执行flag=1的for循环,执行完毕以后,t1对象的run()方法出栈。t2对象的run()方法入栈,根据条件执行flag=2的for循环,执行完毕以后,t2对象的run()方法出栈,之后执行main方法当中的System.out.println(“我是主方法,我是来测试顺序的”);

在这里插入图片描述

2.多线程

在这里插入图片描述
在这里插入图片描述
从输出效果上来看我们发现线程的输出的交替执行,这是因为随着内核当中的时间片的轮转,我们需要将数据不断的写会内存,写会内存的过程当中总会有线程占据总线,这样就导致了数据的来回切换。
同时我们还需要注意到,main方法当中有一个输出,这个竟然是第一个输出出来的。这说明:线程之间是相互独立的,谁也不会等待谁先执行完毕
在这里插入图片描述

七、为什么要引入线程

引入线程的主要目的是为了提高程序的并发性
例如我们想要实现一个文件输入的功能,如果用多进程去做,我们需要实现2个进程,一个用来响应鼠标、键盘的交互线程,一个用来运算数据。为使程序能并发执行,系统必须对进程进行以下的一系列操作:创建进程、撤销进程以及进程间切换。据此可知,由于进程是一个资源的拥有者,因而在创建、撤消和切换中,系统必须为之付出较大的时空开销,从而限制了并发程度的进一步提高。

但是如果我们用线程去实现,那么我们就可以将文件输入的功能交给一个进程去实现,同时该进程内部可以有2个线程,一个用来响应鼠标、键盘的交互线程,一个用来运算。由于线程之间共享内存同时线程也比进程更加轻量化,那么导致进程这个资源的拥有者不至于被频繁的创建、撤消和切换。同时即便是要进行切换,那么线程的切换导致的系统开销比进程的切换更小,从而能大大提示程序的并发性。

八、进程和线程的区别

1.从属关系: 进程是正在运行程序的实例,进程中包含了线程,而线程中不能包含进程。线程不能独立于进程而存在。
2.描述侧重点: 进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位。
3.共享资源: 多个进程间不能共享资源,而多个线程可以共享同一进程资源文件(堆和方法区)。
4.操纵者: 一般情况下进程的操作者是操作系统,而线程的操作者是编程人员。
5.上下文切换: 线程上下文切换速度比进程的上下文切换速度更快。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二证券策略:股指预计维持震荡格局 关注汽车、半导体等板块

第二证券指出&#xff0c;方针组合拳齐下&#xff0c;商场蓄势待起&#xff0c;短期指数或向上挑战3100点&#xff0c;低位业绩板块、叠加AI或是3月商场主要出资主线&#xff0c;尽管商场情绪高涨&#xff0c;但不主张情绪化追涨&#xff0c;究竟上方还有压制&#xff0c;放量打…

[BSidesCF 2019]Pick Tac Toe

[BSidesCF 2019]Pick Tac Toe 首先进行常规的信息收集&#xff0c;尝试几次下三子棋后查看源码发现 此时只需要更改id为r的&#xff0c;将他改为X&#xff0c;我们就胜利了抓包发现&#xff0c;数据通过post提交参数为move&#xff0c;顺便再下一子&#xff0c;抓包更改为move…

奥特曼剧透GPT-5,将在高级推理功能上实现重大进步

奥特曼&#xff1a;“GPT-5的能力提升幅度将超乎人们的想象...” 自 Claude 3 发布以来&#xff0c;外界对 GPT-5 的期待越来越强。毕竟Claude 3已经全面超越了 GPT-4&#xff0c;成为迄今为止最强大模型。 而且距离 GPT-4 发布已经过去了整整一年时间&#xff0c;2023年3月1…

长安链Docker Java智能合约引擎的架构、应用与规划

#功能发布 长安链3.0正式版发布了多个重点功能&#xff0c;包括共识算法切换、支持java智能合约引擎、支持后量子密码、web3生态兼容等。我们接下来为大家详细介绍新功能的设计、应用与规划。 在《2022年度长安链开源社区开发者调研报告》中&#xff0c;对Java合约语言支持是开…

9.用FFmpeg测试H.264文件的解码时间

1. Essence of Method 要测试对H.264文件的解码时间&#xff0c;可以使用FFmpeg进行操作。FFmpeg是一个开源的多媒体处理工具&#xff0c;可以用来处理视频和音频文件&#xff0c;包括解码H.264文件。以下是使用FFmpeg的命令行来测试解码时间的方法&#xff1a; ffmpeg -i in…

Unity类银河恶魔城学习记录11-2 p104 Inventoty源代码

此章节相对较难理解&#xff0c;有时间单独出一章讲一下 Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili InventoryItem.cs…

React的生命周期

生命周期图谱: React lifecycle methods diagram 生命周期三大阶段 挂载阶段 流程: constructor > render > componentDidMount 触发: ReactDOM.render(): 渲染组件元素 更新阶段 流程: render > componentDidUpdate 触发: setState() , forceUpdate(), 组件接收到新…

JS+CSS3点击粒子烟花动画js特效

JSCSS3点击粒子烟花动画js特效 JSCSS3点击粒子烟花动画js特效

【python】Anaconda安装后打不开jupyter notebook(网页不自动跳出)

文章目录 一、遇到的问题&#xff1a;jupyter notebook网页不自动跳出&#xff08;一&#xff09;输入jupyter notebook命令&#xff08;二&#xff09;手动打开网页 二、解决办法&#xff1a;指定浏览器&#xff08;一&#xff09;找文件 jupyter_notebook_config.py&#xff…

JVM常用垃圾收集器

JVM 4.1 哪些对象可以作为GC ROOT? 虚拟机栈&#xff08;栈帧中的局部变量表&#xff09;中引用的对象本地方法栈中引用的对象方法区静态变量引用的对象方法区常量引用的对象被同步锁持有的对象JNI&#xff08;Java Native Interface&#xff09;引用的对象 4.2 常用垃圾收集…

Spring Boot 自动化单元测试类的编写过程

前言 Web环境模拟测试 企业开发不仅要保障业务层与数据层的功能安全有效&#xff0c;也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的&#xff0c;并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测…

【重温设计模式】状态模式及其Java示例

状态模式的基本概念 在编程世界的大海中&#xff0c;各种设计模式就如同灯塔&#xff0c;为我们的代码编写指明方向。其中&#xff0c;状态模式是一种行为设计模式&#xff0c;它让你能在一个对象的内部状态改变时改变其行为&#xff0c;使得对象看起来就像改变了其类一样。这…

微信小程序原生<map>地图实现标记多个位置以及map 组件 callout 自定义气泡

一、老规矩先上效果图: 二、在pages文件夹下新建image文件夹用来存放标记的图片。 三、代码片段 也可以参考小程序文档:https://developers.weixin.qq.com/miniprogram/dev/component/map.html index.wxml代码 <mapid="map"style="width: 100%; height:1…

企业专业化管理金字塔:技能进阶与案例分析

在纷繁复杂的企业管理领域中&#xff0c;一套行之有效的管理技能体系对于企业的稳健发展至关重要。本文将深入探讨企业专业化管理金字塔的五个层次&#xff1a;基本的管理技能、业务操作管理技能、组织管理技能、组织开发技能以及管理转变技能&#xff0c;并结合实际案例&#…

mac电脑修改终端zsh显示的用户名

电脑名称一直没有修改&#xff0c;所以电脑名称都是Apple的MacBook Pro&#xff0c;如下图所示&#xff1a; mac电脑终端显示用户名太长一点也不美观&#xff0c;而且占用很长的行&#xff0c;浪费空间&#xff0c;可以通过修改来调整要显示什么内容&#xff1a; 方式一 要想换…

rabbitmq-spring-boot-start配置使用手册

rabbitmq-spring-boot-start配置使用手册 文章目录 1.yaml配置如下2.引入pom依赖如下2.1 引入项目resources下libs中的jar包依赖如下2.2引入maven私服依赖如下 3.启动类配置如下4.项目中测试发送消息如下5.项目中消费消息代码示例6.mq管理后台交换机队列创建及路由绑定关系如下…

信息检索(十三):On Complementarity Objectives for Hybrid Retrieval

On Complementarity Objectives for Hybrid Retrieval 摘要1. 引言2. 相关工作2.1 稀疏和密集检索2.2 互补性 3. 提出方法3.1 Ratio of Complementarity (RoC)3.2 词汇表示&#xff08;S&#xff09;3.3 语义表示&#xff08;D&#xff09;3.4 互补目标 4. 实验4.1 实验设置4.2…

关系数据库:关系数据结构基础与概念解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Nginx学习与使用

Nginx 什么是NginxNginx命令Nginx 配置文件文件组成全局块&#xff1a;配置服务器整体运行的配置指令Events块&#xff1a;影响Nginx服务器与用户的网络连接Http块Http全局块Server块全局Server快Location块 配置实例Nginx配置实例——反向代理 什么是Nginx Nginx命令 1.使用…

湖北省地质灾害分布数据 崩塌滑坡泥石流空间分布地质灾害详查等数据集

地质灾害是指在自然或者人为因素的作用下形成的&#xff0c;对人类生命财产造成的损失、对环境造成破坏的地质作用或地质现象。地质灾害在时间和空间上的分布变化规律&#xff0c;既受制于自然环境&#xff0c;又与人类活动有关&#xff0c;往往是人类与自然界相互作用的结果。…