线程和进程的区别和联系

news2025/1/16 4:02:39

一、什么是进程

进程(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.coloradmin.cn/o/1530663.html

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

相关文章

【MySQL】知识点 + 1

# &#xff08;1&#xff09;查询当前日期、当前时间以及到2022年1月1日还有多少天&#xff0c;然后通过mysql命令执行命令。 select curdate() AS 当前日期,curtime() AS 当前时间,datediff(2022-01-01, curdate()) AS 距离2022年1月1日还有天数;# &#xff08;2&#xff09;利…

2024年 信息系统管理工程师(中级)

2024年信息系统管理工程师全套视频、历年真题及解析、历年真题视频解析、教材、模拟题、重点笔记等资料 1、2023、2022、2021、2020年全套教程精讲视频。 2、信息系统管理工程师历年真题及解析&#xff08;综合知识、案例分析&#xff09;、历年真题视频解析。 3、官方最新信…

【linux线程(三)】生产者消费者模型详解(多版本)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux线程 1. 前言2. 初识生产…

【数据结构】哈希表与哈希桶

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.概念 2.哈希冲突…

SylixOS工程如何生成map文件

生成.map文件通常是在编译链接阶段由编译器或链接器自动完成的。如果你需要手动生成.map文件&#xff0c;可以通过配置链接器选项来实现。 以bsp工程为例&#xff0c;在内核工程/libsylixos/SylixOS/mktemp/bsp.mk文件中添加-Wl,-Map,output.map选项来生成.map文件。

Java学习笔记:异常处理

Java学习笔记&#xff1a;异常处理 什么是异常异常体系结构&#xff1a;Error、Exception自定义异常 ​ **2024/3/19** 什么是异常 异常体系结构&#xff1a;Error、Exception 自定义异常

Orange3数据预处理(分类器组件)

创建类属性 从字符串属性创建类属性。 输入 数据&#xff1a;输入数据集 输出 数据&#xff1a;具有新类变量的数据集 功能 创建类属性功能从一个已存在的离散或字符串属性中创建一个新的类属性。该组件匹配所选属性的字符串值&#xff0c;并为匹配的实例构造一个新…

Spring Boot:筑基

Spring Boot 前言概述使用 Intellij idea 快速创建 Spring Boot 项目注意事项 前言 在学习 Spring 、SpringMVC 、MyBatis 和 JPA 框架的过程中&#xff0c;了解到 SSM 框架为 Java Web 开发提供了强大的后端支持&#xff0c;JPA 框架则简化了数据库的操作。然而&#xff0c;S…

【智能算法应用】智能算法优化BP神经网络思路

目录 1.思路2.设计 1.思路 在BP神经网络结构中&#xff0c;权值和阈值被视为模型的参数&#xff0c;它们在训练过程中需要通过反向传播算法进行学习&#xff0c;以使得网络的输出尽可能地接近真实标签。这意味着网络的目标是通过最小化均方误差&#xff08;MSE&#xff09;来调…

Docker专题-03 Log-Driver日志转存

Docker专题教程 注&#xff1a; 本教程由羞涩梦整理同步发布&#xff0c;本人技术分享站点&#xff1a;blog.hukanfa.com 转发本文请备注原文链接&#xff0c;本文内容整理日期&#xff1a;2024-03-19 csdn 博客名称&#xff1a;五维空间-影子&#xff0c;欢迎关注 说明 容器…

echarts饼图图例换行

legend: {left: "5%",bottom: "10%",orient: vertical,}, 完整代码 option {tooltip: {trigger: item},legend: {left: "5%",bottom: "10%",orient: vertical,},// legend: [// {// x: left,// left:"5%",// bottom: …

牛客题霸-SQL进阶篇(刷题记录二)

本文基于前段时间学习总结的 MySQL 相关的查询语法&#xff0c;在牛客网找了相应的 MySQL 题目进行练习&#xff0c;以便加强对于 MySQL 查询语法的理解和应用。 由于涉及到的数据库表较多&#xff0c;因此本文不再展示&#xff0c;只提供 MySQL 代码与示例输出。 部分题目因…

贪心算法(算法竞赛、蓝桥杯)--奶牛晒衣服

1、B站视频链接&#xff1a;A28 贪心算法 P1843 奶牛晒衣服_哔哩哔哩_bilibili 题目链接&#xff1a;奶牛晒衣服 - 洛谷 #include <bits/stdc.h> using namespace std; priority_queue<int> q;//用大根堆维护湿度的最大值 int n,a,b; int tim,maxn;int main(){s…

smodin(Al工具)

一、中文官网 ​​Smodin&#xff1a;多语言写作辅助​​ &#xff08;google账号登录&#xff09; ​​https://smodin.io/zh-cn/​​ 二、具体使用 2.1 写文章 (写 5 个或更多单词、一个问题或一个长标题。标题越好&#xff0c;文章就越好) 选择语言&#xff0c;输入标题…

数据之谜:解读Facebook的用户行为

在当今数字化时代&#xff0c;社交媒体平台已经成为人们生活中不可或缺的一部分&#xff0c;而Facebook作为全球最大的社交网络之一&#xff0c;其背后隐藏着许多数据之谜。本文将深入探讨Facebook的用户行为&#xff0c;并试图解读其中的奥秘。 用户行为数据的收集 Facebook作…

初探Springboot 参数校验

文章目录 前言Bean Validation注解 实践出真知异常处理 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 前言 工作中我们经常会遇到验证字段是否必填&#xff0c;或者字段的值是否…

网络工程师练习题2

网络工程师 将专用IP地址转换为公用IP地址的技术是&#xff08;&#xff09;。 A.ARPB.DHCPC.UTMD.NAT 【答案】D 【解析】概念题&#xff0c;NAT技术将源地址从内部专用地址转换成可以在外部Internet上路由的全局IP地址。 R1、R2是一个自治系统中采用RIP路由协议的两个相…

微软AI系列 C#中实现相似度计算涉及到加载图像、使用预训练的模型提取特征以及计算相似度

在C#中实现相似度计算涉及到加载图像、使用预训练的模型提取特征以及计算相似度。你可以使用.NET中的深度学习库如TensorFlow.NET来加载预训练模型&#xff0c;提取特征&#xff0c;并进行相似度计算。 以下是一个使用TensorFlow.NET的示例&#xff1a; using System; using …

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

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

HarmonyOS系统开发ArkTS常用组件文本及参数(五)

目录 一、Text组件 1、Text组件案例 二、Text组件参数 1、string字符串类型 2、Resources类型 2.1、resources中内容配置 base/element/string.json 中的内容 zh_US/element/string.json 中的内容 es_US/element/string.json 中的内容 2.2、环境适配 适配英文 适配中文…