进程和线程的区别

进程

什么是进程呢
进程就是一个正在执行的程序 ,是计算机操作系统进行资源分配和任务调度的基本单位.
进程是计算机中的程序关于某个数据集合上的一次运行活动,是系统分配资源的基本单位,是操作系统结构的基础.每个进程都有它自己的地址空间,包括文本区域 、数据区域和堆栈区域等部分。进程是一个动态的概念,相反程序是静态的指令集合。一个进程包含一个程序,程序是进程完成相应的功能的描述;但一个程序对应多个进程。
进程的状态
进程的状态包括就绪状态、阻塞状态和运行状态
进程的特点
并发性: 多个进程可以在同一时间内在不同处理器(CPU)上并行执行,提高了计算机操作系统的资源利用率 和并发性能.
==动态性:==进程的=是一个动态的概念,它会随着程序的执行而产生,随着程序的终止而消亡.
独立性: 每个进程都有自己的地址空间和系统资源,相互独立运行. 这样可以使得每个进程之间不会相互干扰 可以保证系统的稳定性.

线程

线程是操作系统能够进行运算调度的最小单位,它是操作系统能够识别的最小并发单位
线程是"轻量级"的进程 一个进程里可以有多个线程。 每个线程都有独立的栈空间,线程之间共享全局变量和静态变量。线程之间的通信比进程之间的通信更快,它们共享着同一块内存空间。
虽然线程可以提高我们程序的运行性能 ,但是线程过多会导致系统资源的浪费,甚至会导致死锁等问题 。 在使用线程的时候,我们应该根据实际情况合理安排线程的数量。

怎么创建一个线程

在Java中,我们可以通过一下方式 创建线程
1、继承Thread类并重写run()方法。
2、实现Runnable接口并重写run()方法。
第一种实现的代码如图:

package thread;
//直接继承Thread类创建线程
class MyThread extends Thread {@Overridepublic void run() {//这里要写分代码,就是该线程要完成的工作while (true) {System.out.println("hello thread");//让程序休眠1stry {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}
public class Demo1 {public static void main(String[] args) {Thread t = new MyThread();t.start();  //启动线程  相当于创建了新的线程  如果直接调用run()方法就不算创建新的线程while (true) {System.out.println("hello main");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

第二种如下图:

package thread;//利用实现Runnable接口来创建线程
class MyRunnable implements Runnable {@Overridepublic void run() {while (true) {System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}
public class Demo2 {public static void main(String[] args) {Thread t = new Thread(new MyRunnable());//启动线程t.start();while (true) {System.out.println("hello main");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

进程和线程的区别

根本区别

进程是操作系统资源分配的基本单位,线程是CPU任务调度和执行的基本单位。

1、资源开销

进程需要更多的系统资源,因为每个进程都有自己的地址和空间。在对比之下,线程需要的资源较少,因为在同一进程中所有的线程都共享相同的地址空间和资源。

2、包含关系

一个进程可以包含多个线程,这些线程可以并行执行,从而可以提高程序的运行的效率。

3、内存分配

进程之间都是相互独立的,他们各有自己的地址空间和资源。同一进程中的所有线程共享相同的地址空间和资源。

4、影响关系

如果是一个进程崩溃,在保护的模式下不会对其他的进程产生影响。但是如果一个线程崩溃,可能会导致整个进程崩溃。

Java和C++在线程上的区别

1、跨平台性

Java是一个跨平台的语言,因此在它的线程模型上也是跨平台的。无论在哪个操作系统上,Java的线程行为都是一致的。而C++的线程模型则依赖具体的操作系统,不同的操作系统可能有不同的线程实现方式。

2、生命周期管理

在C++中,线程的生命周期是在主线程的运行期间内,也就是说,子线程的生命周期是在主线程的运行期间内结束的。 在Java中,子线程的生命周期可以延续到主线程之外,即主线程结束后,子线程还可以继续运行,除非它被标记成后台线程(守护线程)。

操作系统中为什么有进程

总的原因就是:进程的存在是为了实现多道程序并发执行和资源共享。

资源分配

进程是操作系统分配资源的基本单位。通过创建进程,操作系统可以为每个程序分配独立的资源,保证每个进程在运行时不会相互干扰 。

并发执行

进程允许多个程序同时运行,提高了系统的并发性和效率。可以充分利用CPU同时执行多个任务。

独立性和隔离性

每个进程都有自己独立的地址空间,相互隔离。这也就是说一个进程的崩溃不会影响其他进程的正常运行。

方便管理

操作系统可以通过进程对程序进行管理、调度 ;进程会提供一种统一的方式来组织操作系统中的程序执行。

好了 本篇内容到此就完了 ,后面还会讲讲多线程的一些其他知识 谢谢大家的浏览 !!!

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

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

相关文章

C语言程序与设计——预处理命令

宏 在C语言中宏有三种形式: 定义符号常量定义傻瓜表达式定义代码段 在使用宏的过程中需要注意的是,宏的作用仅仅是在预处理阶段对代码进行替换,而非进行运算,所以在使用时,如果出现了我们预期之外的结果,很有可能是宏…

Spring IoC DI(1)

IoC & DI入门 Spring 通过前面的学习, 我们知道了Spring是一个开源框架, 它让我们的开发更加简单. 它支持广泛的应用场景, 有着活跃且庞大的社区, 这就是Spring能够长久不衰的原因. 但是这个概念还是比较抽象. 可以用更具体的话描述Spring, 那就是: Spring是包含了众多…

Jakarta项目介绍

概述 在升级Spring Boot到3.0版本以后,或升级Spring到6.0版本以上,会发现应用编译失败或启动失败等问题。 经过排查不难得知,Spring 6或Spring Boot 3(实际上依赖于Spring 6)不再支持javax.开头的一系列依赖包&#…

人工智能的迷惑行为:AI世界的隐秘角落

人工智能迷惑行为大赏 在当今数字化时代,人工智能技术的飞速发展给我们的生活带来了诸多便利和可能性,但同时也伴随着一些令人困惑的现象和行为。本文将深入探讨人工智能的迷惑行为,揭示AI世界中的隐秘角落,让我们一同探寻这个充…

Python操作PostGre的简单封装

文章目录 一、安装依赖二、配置文件三、实现类 一、安装依赖 pip install psycopg2 numpy 二、配置文件 utils.config.py import os############### 233 PostGre Configuration ############### POSTGRE_HOST "192.168.0.233" POSTGRE_PORT 5432 POSTGRE_USER …

《深入浅出LLM 》(二):大模型基础知识

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、…

CPU缓存行及伪共享

CPU Cache概述 随着CPU的频率不断提升,而内存的访问速度却没有质的突破,为了弥补访问内存的速度慢,充分发挥CPU的计算资源,提高CPU整体吞吐量,在CPU与内存之间引入了一级Cache。随着热点数据体积越来越大,…

代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机II ,55. 跳跃游戏 , 45.跳跃游戏II

贪心&#xff1a;只要把每一个上升区间都吃到手&#xff0c;就能一直赚 class Solution { public:int maxProfit(vector<int>& prices) {int res 0;for(int i 1;i< prices.size();i){int diff prices[i] - prices[i-1];if(prices[i] > prices[i-1]){res d…

【Python进阶】argparse库基础用法全总结:高效脚本参数解析 | 参数类型使用代码

argparse库是 Python 标准库中用于解析命令行参数和选项的模块。它使得编写命令行界面&#xff08;CLI&#xff09;变得更加容易。&#xff0c;在深度学习中用到的比较多~~ 我们运行Python文件往往是直接输入命令 python test.py 但是如果我们想给Python文件脚本运行时候传入参…

springMVC的常见问题(面试题)问答

当涉及到Spring MVC的面试题&#xff0c;通常会涉及到该框架的基本概念、工作原理、核心组件以及一些相关的配置和最佳实践。下面是一些常见的Spring MVC面试题及其详细答案&#xff1a; 什么是Spring MVC&#xff1f; Spring MVC是基于Java的Web框架&#xff0c;用于开发Web应…

蓝桥杯练习题总结(二)dfs题、飞机降落、全球变暖

目录 一、飞机降落 二、全球变暖 初始化和输入 确定岛屿 DFS搜索判断岛屿是否会被淹没 计算被淹没的岛屿数量 三、军训排队 一、飞机降落 问题描述&#xff1a; N架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 时刻到达机场上空&#xff0c;到达时它的剩余…

[Linux]文件缓冲区

文件fd 输出重定向除了用dup2()改变数组下标外&#xff0c;还可以用命令来完成 所有的命令执行&#xff0c;都必须有操作系统将其运行起来变成进程&#xff0c;然后根据>>, <<来判断是输入重定向&#xff0c;还是输出重定向。 缓冲区 之所以有缓冲区&#xff0…

2024帝国CMS彩虹易支付插件,兼容易支付里的支付宝支付

1、上传 yunpay 文件夹到 /e/payapi/ 目录 2、在目录 yunpay 内找到 to_pay.php 、 return_url.php 、 notify_url.php 分别将文件内的 //支付API地址 $alipay_config[apiurl] http://XXX.XXX.com/; 改成自己易支付的支付地址 3、后台——其他——在线支付——管理支付接口—…

JavaScript 基础、内置对象、BOM 和 DOM 常用英文单词总结

一提到编程、软件、代码。对于英语不是很熟悉的同学望而却步。其实没有想像中的难么难&#xff0c;反复练习加上自己的思考、总结&#xff0c;会形成肌肉记忆。整理一下&#xff0c;初学者每天30遍。 1、JavaScript 基础语法 break&#xff1a;中断循环或 switch 语句的执行。…

安卓转鸿蒙竟如此丝滑

随着鸿蒙的爆火&#xff0c;大家都想知道鸿蒙能不能搞&#xff1f; 相信大家搞开发的&#xff0c;都多多少少的了解过鸿蒙。近几个月鸿蒙的大动作也不少&#xff0c;如&#xff1a;重庆市近20个垂域应用与鸿蒙原生合作、深圳制定鸿蒙《行动计划》、阿里再次与鸿蒙展开合作&…

树森林试题

01.下列关于树的说法中&#xff0c;正确的是&#xff08;). Ⅰ.对于有n个结点的二叉树&#xff0c;其高度为log2n Ⅱ.完全二叉树中&#xff0c;若一个结点没有左孩子&#xff0c;则它必是叶结点 Ⅲ.高度为h (h>0)的完全二叉树对应的森林所含的树的个数一定是h IV.一棵树中的…

微信小程序开发技巧:canvas实现电子签名

在微信小程序中实现电子签名功能方式很多,本文采用canvas绘制的方式实现。具体实现步骤如下: 在页面中添加canvas元素 <view class"container"><canvas canvas-id"signCanvas" class"canvas" disable-scrolltrue touchstart"sta…

Docker常用命令详解

Docker 是一种用于开发、交付和运行应用程序的开放平台&#xff0c;它允许您将应用程序与其依赖项打包到一个称为容器的轻量级、可移植的容器中。以下是一些常用的 Docker 命令及其详细解释&#xff1a; docker run&#xff1a;运行一个容器。 例如&#xff1a;docker run -it …

Dataset之UCI_autos_cars:UCI_autos_imports-85(汽车进口数据集)的简介、安装、案例应用之详细攻略

Dataset之UCI_autos_cars&#xff1a;UCI_autos_imports-85(汽车进口数据集)的简介、安装、案例应用之详细攻略 目录 UCI_autos_imports-85的简介 UCI_autos_imports-85的安装 UCI_autos_imports-85的案例应用 1、训练一个简单的线性回归模型来预测汽车的价格 UCI_autos_i…