线程和进程的区别和联系

一、什么是进程

进程(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.上下文切换: 线程上下文切换速度比进程的上下文切换速度更快。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十二 超级数据查看器 讲解稿 详情7 其他功能

十二 超级数据查看器 讲解稿 详情7 其他功能 点击此处 以新页面 打开B站 播放当前教学视频 点击访问app下载页面 百度手机助手 下载地址 ​ 讲解稿全文&#xff1a; 其他操作&#xff0c;主要用来完成替换和批量修改&#xff0c; 这里&#xff0c;我们想给成语字段增…

YOLOv9改进策略:卷积魔改 | 分布移位卷积(DSConv),提高卷积层的内存效率和速度

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a; YOLOv9如何魔改卷积进一步提升检测精度&#xff1f;提出了一种卷积的变体&#xff0c;称为DSConv&#xff08;分布偏移卷积&#xff09;&#xff0c;其可以容易地替换进标准神经网络体系结构并且实现较低的存…

二、Kubernetes(k8s)中部署项目wordpress(php博客项目,数据库mysql)

前期准备 1、关机顺序 2、开机顺序 (1)、k8s-ha1、k8s-ha2 (2)、master01、master02、master03 (3)、node01、node02 一、集群服务对外提供访问&#xff0c;需要通过Ingress代理发布域名 mast01上传 ingress-nginx.yaml node01、node02 上传 ingress-nginx.tar 、kube-webh…

【知识库系统】JWT实现前后端分离验证

本文会先从理论和实践两部分讲述如何去理解和实现通过JWT进行身份认证。 一、理论 1. SpringSecurity 默认的认证是需要通过 UsernamePasswordAuthenticationFilter 进行认证的&#xff0c;该过滤器认证前&#xff0c;会到 SecurityContextHolder 中寻找是否有符合的 Authent…

Issue 2046:Missing array size check in NewFixedArray

文章目录 环境搭建漏洞分析漏洞触发 漏洞利用总结参考 环境搭建 sudo apt install pythongit reset --hard 64cadfcf4a56c0b3b9d3b5cc00905483850d6559 export DEPOT_TOOLS_UPDATE0 gclient sync -D// debug version tools/dev/v8gen.py x64.debug ninja -C out.gn/x64.debug/…

java数据结构与算法刷题-----LeetCode135. 分发糖果

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 左右遍历2. 进阶&#xff1a;常数空间遍历&#xff0c;升序降…

Visual Studio - 添加快捷键图标

Visual Studio - 添加快捷键图标 1. Text Editor Toolbar Options -> Add or Remove Buttons -> Customize2. Toolbars3. Commands -> Debug4. Add Command...References 1. Text Editor Toolbar Options -> Add or Remove Buttons -> Customize 2. Toolbars B…

并发编程之synchronized的详细解析

4.2 synchronized 解决方案 应用之互斥 为了避免临界区的竞态条件发生&#xff0c;有多种手段可以达到目的。 阻塞式的解决方案&#xff1a;synchronized&#xff0c;Lock 非阻塞式的解决方案&#xff1a;原子变量 本次课使用阻塞式的解决方案&#xff1a;synchronized&am…

长安链智能合约标准协议第二草案——BNS与DID协议邀请社区用户评审

长安链智能合约标准协议 在智能合约编写过程中&#xff0c;不同的产品及开发人员对业务理解和编程习惯不同&#xff0c;即使同一业务所编写的合约在具体实现上也可能有很大差异&#xff0c;在运维或业务对接中面临较大的学习和理解成本&#xff0c;现有公链合约协议规范又不能完…

C++:类和对象(上篇)

目录&#xff1a; 一&#xff1a;面向对象和过程的介绍 二&#xff1a;类的引入 三&#xff1a;类的定义 四&#xff1a;类的访问限定符以及封装 五&#xff1a;类的作用域 六&#xff1a;类的实例化 七&#xff1a;类对象大小的计算 八&#xff1a;类成员函数的this指…

C语言经典算法-7

文章目录 其他经典例题跳转链接36.排序法 - 改良的选择排序37.快速排序法&#xff08;一&#xff09;38.快速排序法&#xff08;二&#xff09;39.快速排序法&#xff08;三&#xff09;40.合并排序法 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三…

JJJ:改善ubuntu网速慢的方法

Ubuntu 系统默认的软件下载源由于服务器的原因&#xff0c; 在国内的下载速度往往比较慢&#xff0c;这时我 们可以将 Ubuntu 系统的软件下载源更改为国内软件源&#xff0c;譬如阿里源、中科大源、清华源等等&#xff0c; 下载速度相比 Ubuntu 官方软件源会快很多&#xff01;…

Linux实践 - 命令行解释器 简易版

~~~~ 前言解决的问题为什么shell要以子进程的方式执行我们的命令&#xff1f;为什么直接使用程序名ls&#xff0c;而不是路径/usr/bin/ls&#xff1f; 头文件包含命令行提示符接受用户命令行输入解析用户的输入内建命令&&特殊处理ls 时目录等文件不带高亮颜色cd时目录不…

electron-builder 打包问题,下载慢解决方案

目录 问题说明设置下载源 &#xff1f;解决方案思路下载Electron下载winCodeSign下载nsis下载nsis-resources 总结 问题说明 项目使用了Electron&#xff0c;在第一次打包时会遇见下载慢&#xff0c;导致打包进度几乎停滞不前&#xff0c;甚至可能直接报错 其实这是因为Electr…

【SpringBoot3+Mybatis】框架快速搭建

文章目录 GitHub 项目一、依赖二、 配置文件三、启动类四、SpringBoot3兼容Druid报错五、工具类5.1 结果封装类5.2 解决枚举类5.3 MD5加密工具类 GitHub 项目 springboot-part——springboot-integrate-07 Mybatis-plus版完整CRUD项目文档记录&#xff1a; 【SpringBoot3Myba…

【Python循环6/6】循环的综合运用

目录 回顾 for循环遍历列表 for循环进行累加/累乘的计算 复杂的条件判断 嵌套 嵌套循环 练习 遍历整数列表 总结 回顾 在之前的博文中&#xff0c;我们学习了for计数循环&#xff1b;while条件循环&#xff1b;以及跳出循环的两种方法break&#xff0c;continu…

CMU 10-414/714: Deep Learning Systems --hw3

实现功能 在ndarray.py文件中完成一些python array操作 我们实现的NDArray底层存储就是一个一维向量&#xff0c;只不过会有一些额外的属性&#xff08;如shape、strides&#xff09;来表明这个flat array在维度上的分布。底层运算&#xff08;如加法、矩阵乘法&#xff09;都…

幻兽帕鲁游戏搭建(docker)

系列文章目录 第一章&#xff1a; 幻兽帕陆游戏搭建 文章目录 系列文章目录前言一、镜像安装1.创建游戏目录2.拉取镜像3.下载配置文件4.启动游戏 二、自定义配置总结 前言 这段时间一直在写论文还有找工作&#xff0c;也没学啥新技术&#xff0c;所以博客也很长时间没写了&am…

【滑动窗口、矩阵】算法例题

目录 三、滑动窗口 30. 长度最小的子数组 ② 31. 无重复字符的最长子串 ② 32. 串联所有单词的子串 ③ 33. 最小覆盖子串 ③ 四、矩阵 34. 有效的数独 ② 35. 螺旋矩阵 ② 36. 旋转图像 ② 37. 矩阵置零 ② 38. 生命游戏 ② 三、滑动窗口 30. 长度最小的子数组 ② 给…

高效备考2025年AMC8竞赛:吃透2000-2024年600道真题(免费送题)

我们继续来随机看五道AMC8的真题和解析&#xff0c;根据实践经验&#xff0c;对于想了解或者加AMC8美国数学竞赛的考生来说&#xff0c;吃透AMC8历年真题是备考更加科学、有效的方法之一。 即使不参加AMC8竞赛&#xff0c;吃透了历年真题600道和背后的知识体系&#xff0c;那么…