进程与线程的区别?

news2024/11/19 6:23:51

并发和并行

在聊进程和线程的概念之前,首先了解一下操作系统相关概念,大部分操作系统(如Windos、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务的时间片用完会被强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速切换,给人的感觉就是多个任务在
“同时进行”,这就是我们所说的并发。
在这里插入图片描述

当然,这是对于单核CPU来说,现在大多数计算机都是多核的,在核与核之间是并行运行的,相互之间不影响,在任意时刻,可以同时有多个任务同时运行在多核CPU上,但是对于每一个CPU内部,还是以抢占时间片的方式并发执行:
在这里插入图片描述

CPU、操作系统、内存、硬盘、程序的概念

  • 计算机的核心是CPU,它承担了所有的计算任务。

  • 操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件。

  • 内存用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。内存存储的数据断电不可保存。它是外存和CPU进行沟通的桥梁。电脑中所有运行的程序都在内存中进行,内存性能的强弱会直接影响电脑整体性能的发挥。只要电脑开始工作,操作系统就会把需要运算的数据,从内存中调到CPU中进行计算。当运算完成,CPU将结果传输出来。内存的好坏决定计算机整体运行的快慢。

  • 硬盘是计算机中负责存储数据的设备,断电后依然可以保存。

  • 程序是一组由编程语言编写的,用于操作计算机的指令,运行于操作系统之上。

内存之所以快,是因为内存是Random Access Memory,即随机访问存储器。也就是无论数据在内存中的哪个位置,都可以以O(1)的时间复杂度,直接访问,访问速度都是一样的。这就导致了内存的读写非常快,

而这么快是有代价的:内存每一个存储单元都是由一个电容和一个晶体管组成的。电容存储电荷,晶体管控制是否可以从电容读取或写入电荷。电荷的存在与否对应了二进制的0和1。问题在于,电容会自然地漏电,所以它们需要不断地被刷新(重新充电)来保持存储的数据。当断电时,这个刷新过程就会停止,电容很快就会漏光电荷,存储的数据也就随之丢失。

所以内存断电会丢失数据。

而硬盘不支持随机访问,而且读写速度也比内存慢,但是硬盘中的数据可以永久保存。

进程和线程的概念

进程

进程是程序的一次执行过程。

进程是操作系统进行资源分配和调度的一个独立单位。

进程具有的特征:

  1. 动态性,从程序执行开始到程序结束执行,进程是有声明周期的,在动态变化的。
  2. 并发性,任何进程都可以和其他进程并发执行。
  3. 独立性,进程是操作系统资源分配和调度的独立单位。
  4. 结构性,进程有程序、数据和进程控制块三部分组成。

进程是能拥有资源和独立运行的最小单位,每个进程有各自独立的内存,使得各个进程之间的内存地址相互隔离。

线程

线程是程序执行的最小单位。

任务调度采用的是时间片轮转的抢占式调度方式,线程CPU调度和分派的最小单位。

  1. 进程是操作系统进行资源分配最小单位。
  2. 线程是线程CPU调度和运行的最小单位。

一个进程可以拥有多个线程,各个线程共享进程内存空间。

真正去抢占CPU时间片,得到CPU时间片并运行的是线程。

线程的生命周期

以Java为例,Java中线程有六大状态:

public enum State {
		NEW,
		RUNNABLE,
		BLOCKED,
		WAITING,
		TIMED_WAITING,
		TERMINATED
    }

在这里插入图片描述

wait,join操作都会释放锁,所以结束后不会里面进入Runnable状态,而是去获取锁,如果获取到就马上进入Runnable状态。
sleep操作不会释放锁,所以结束后可以直接进入Runnable状态

进程与线程的区别

  • 进程是操作系统分配资源的最小单位。
  • 线程是程序执行的最小单位。

一个进程由一个或多个线程组成,线程是一个进程中的代码的不同执行路线。

进程之间相互独立,但同一进程下的各个线程共享程序的内存空间(代码、数据集、堆等)。

在这里插入图片描述
在这里插入图片描述
真正在CPU执行和切换的是线程。

总之,线程和进程都是一种抽象的概念,线程是一种比进程更小的抽象,线程和进程都可以用于实现并发

为什么要让线程作为CPU调度和分派的最小单位?

调度和切换:线程上下文切换比进程上下文切换快得多。

程序:程序是一组由编程语言编写,计算机能够识别和执行的指令。

当程序由操作系统将其加载到内存并开始执行时,它就成为一个进程。

进程:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。

进程的创建、切换与销毁存在较大的时空开销,因此,线程的概念开始出现,线程被设计成为进程的一个执行路径,同一个进程的线程共享进程的资源,系统对线程的调度成本远远小于进程。

程序、进程、线程之间的关系:

在这里插入图片描述

进程和线程的区别总结:

  • 本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
  • 包含关系: 一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
  • 资源开销: 每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
  • 影响关系: 一个进程崩溃后,在保护模式下其他进程不会被影响,但是一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮。

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

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

相关文章

音频变速python版

音频变速 如何能在不改变音频其他特点的情况下,只改变语速呢? 有几个python的库可以实现该功能,下面一一介绍。 pydub库 首先,确保安装了pydub和ffmpeg。 下面是一个简单的Python脚本,展示如何改变音频的播放速度&a…

通讯录的实现(顺序表版本)

我们知道通讯录是基于顺序表的前提下,要写好通讯录我们就要深入了解好顺序表。我们先来看看什么是顺序表。(注意今天代码量有点多,坚持一下)。冲啊!兄弟们! 顺序表的简单理解 对于顺序表,我们首…

地球上的七大洲介绍

地球上的七大洲示意图: 1. 亚洲(Asia):世界上最大的洲,面积约为44579000平方公里。亚洲地域辽阔,包括从北极圈到赤道的各种气候和地形。它拥有世界上最多的人口,也是世界上一些最古老文明的发源…

2024年腾讯云最新优惠活动及领券入口整理分享

随着云计算技术的快速发展,越来越多的企业和个人选择将业务部署在云端。腾讯云作为国内知名的云计算服务提供商,为用户提供了丰富的云产品和服务。为了帮助用户降低成本,腾讯云定期推出各种优惠活动。本文将为大家整理分享2024年腾讯云的最新…

1.MMD模型动作场景镜头的导入及视频导出

界面介绍 MIKUMIKUDANCE926版本 MMD的工具栏模型骨骼帧的窗口,在不同时间做不同动作,可以在这里打帧操作时间曲线操作窗口,控制模型两个动作之间的过渡模型操作窗口,导入模型选择模型相机操作,控制相机远近&#xf…

JS/TS笔记学习2

周末总得学点什么吧~ 奥利给! 设计模式: 事件订阅派发模式 简单说就是:事件调度中心,负责接收事件发布者的消息,并将这些消息分发给所有订阅了该事件的订阅者 为什么用它,在构建大型、复杂或交互性强的应用程序时,用该模式非常方便&#xff0…

至少需要[XXXXMB]内存才能安装(宝塔导入数据库提示)

①我的2g内存腾讯云服务器想安装mysql8.0 ②宝塔提示“至少需要[3700MB]内存才能安装” 将数据库部署到宝塔上的时候提示-----》至少需要[XXXXMB]内存才能安装,解决的方法其实也很简单。 首先,进入文件夹/www/server/panel/class,找到找到…

OpenSSH 安全漏洞(CVE-2023-51385) 升级v9.7

漏洞编号:OpenSSH 安全漏洞(CVE-2023-51385) openssh9.7文件获取 https://f.ws59.cn/f/dtv9atef3io 复制链接到浏览器打开 处理方式 ##注释掉的根据实际情况处理 #查询原openssh9.4p1是否有安装openssh-askpass,若有需先删除 rpm -qa | grep openss…

解决Xshell登录云服务器的免密码和云服务器生成子用户问题

Xshell登录云服务器的免密码问题 前言一、Xshell登录云服务器的免密码操作实践 二、centos创建用户创建用户实操删除用户更改用户密码直接删除子用户 前言 Xshell登录云服务器免密码问题的解决方案通常涉及使用SSH密钥对。用户生成一对密钥(公钥和私钥)…

PE程序底层结构与恶意代码插入与执行的研究

Windows PE程序底层结构分析 PE(Portable Executable)是一种Windows操作系统下可执行文件的标准格式 Windows PE程序结构和Linux的elf程序结构类似,首先一个名为simple64.exe程序里有一个头文件和一个段文件,头文件里主要存放的是…

【STL】priority_queue的底层原理及其实现

文章目录 priority_queue的介绍库中priority_queue的使用什么叫仿函数? 模拟实现prioprity_queue类 priority_queue的介绍 解释以上内容 priority_queue(优先级队列)跟stack、queue一样,都是一种容器适配器,根据严格的…

产生死锁的四个必要条件

产生死锁的四个必要条件 互斥使用: 一个资源每次只能被一个线程使用。这意味着如果一个线程已经获取了某个资源(比如锁),那么其他线程就必须等待,直到该线程释放资源。 不可抢占: 已经获得资源的线程在释放资源之前,不…

[leetcode] all-nodes-distance-k-in-binary-tree 二叉树中所有距离为 K 的结点

. - 力扣(LeetCode) 给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 k 。 返回到目标结点 target 距离为 k 的所有结点的值的列表。 答案可以以 任何顺序 返回。 示例 1&#xff1a…

一文了解ERC404协议

一、ERC404基础讲解 1、什么是ERC404协议 ERC404协议是一种实验性的、混合的ERC20/ERC721实现的,具有原生流动性和碎片化的协议。即该协议可让NFT像代币一样进行拆分交易。是一个图币的互换协议。具有原生流动性和碎片化的协议。 这意味着通过 ERC404 协议&#xf…

键值数据库Redis——Windows环境下载安装+命令行基本操作+Java操纵Redis

文章目录 前言一、下载与安装(Windows环境)** 检查数据库连接状态 **** 查看Redis数据库信息 ** 二、Redis五种数据结构与基本操作获取所有的key——keys *清空所有的key——flushall2.1 字符串操作2.2 散列操作2.3 列表操作2.4 集合操作2.5 位图操作 三…

【Java EE】 IoC详解(Bean的存储)

文章目录 🎍Controller(控制器存储)🌸如何从Spring容器中获取对象(ApplicationContext)🌸获取bean对象的其他方式(BeanFactory)🌸Bean 命名约定🌸…

Java调用http接口的几种方式(HttpURLConnection、OKHttp、HttpClient、RestTemplate)

Java作为后端语言是开发接口实现功能供客户端调用接口,这些客户端中最主要是本项目的前端;但有时候也需要Java请求其他的接口,比如需要长连接转短链接(请求百度的一个接口可以实现)、获取三方OSS签名、微信小程序签名、…

数据结构(六)----串

目录 1.串的定义 2.串的基本操作 3.串的存储结构 (1)串的定义 •顺序存储 •链式存储 (2)求串长 (3)求子串 (4)比较串的大小 (5)定位操作 4.字符串的模式匹配 (1)朴素模式匹配算法 (2)KMP算法 •求模式串中的next数组(重点) •练习&#…

第四百六十回

文章目录 1. 概念介绍2. 方法与细节2.1 获取方法2.2 使用细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容,本章回中将介绍如何获取时间戳.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

适配器模式:连接不兼容接口的桥梁

在软件开发中,适配器模式是一种结构型设计模式,它允许不兼容的接口之间进行交互,从而使它们能够一起工作。这个模式经常用于系统升级或集成第三方库的时候,当现有的代码无法直接使用新系统或库提供的接口时,适配器可以…