进程与线程的区别及联系

news2025/1/17 0:05:54

目录

1. 操作系统功能简介

2. 进程

2.1 认识进程

2.2 进程操作系统中如何管理

2.3 PCB如何描述

2.3.1 pid

2.3.2 内存指针

2.3.3 文件描述符表

2.3.4 进程调度相关属性

3. 内存管理

4. 线程

4.1 认识线程

4.2 进程与线程的关系

4.3 线程安全问题


1.操作系统功能简介

 

操作系统是一个做管理工作的软件,管理硬件设备并且为软件提供稳定的运行环境

操作系统是软件和硬件用户之间交互的媒介

常见的操作系统:Windows 98,2000,xp,vista,win7,win10,win11

Linux:特别适合开发与部署的操作系统

Mac:苹果电脑使用的操作系统

Android,IOS等,都是常见的操作系统

我们看一下操作系统的层次结构

层次说明
应用程序java就属于应用程序的一部分
系统调用操作系统给应用程序提供API(程序操作硬件设备时,先通过系统调用,把操作命令给系统内核,其次内核调动驱动程序,来操作硬 件设备)
操作系统内核操作系统的功能(管理)
驱动程序硬件设备,种类繁多,厂商各异,厂商在开发硬件时会提供驱动程序,电脑安装驱动程序后才能正确识别硬件设备
硬件设备打开电脑后盖,看见的就是硬件设备

2.进程

2.1 认识进程

进程(process)也叫任务(task),(ctrl+alt+delete)打开任务管理器,就可以看到电脑正在运行的程序

因此,一个跑起来的程序就是一个进程

8d40b43968d545118e2c3b281ebbdd95.png

 电脑上有很多程序,没有运行起来的,就不是进程,双击运行它,就会创建进程

还可以看到,每一个进程,都对应了电脑所分配的资源,进程是操作系统资源分配的基本单位

c38e7e03ca97450f9142ad1a65f8a35e.png

当运行的进程足够多时,电脑的资源就会被全部占用,这个时候电脑就变得非常卡顿

所以电脑卡顿和电脑硬盘存储的东西多不多没关系

2.2 进程操作系统中如何管理

进程是一个重要的软件资源,是由操作系统进行管理的

管理方式:描述+组织

描述:进程控制块 (PCB:Processing Control Block),使用结构体描述进程属性,不是PCB (printed circuit board)印制线路板

组织:通过一定的数据结构(双向链表)把多个pcb串起来

创建一个进程,本质上是创建一个PCB这样的结构体对象,然后插入到链表中

销毁一个进程,本质上是删除掉链表上的PCB节点

任务管理器上查看进程列表就是遍历这个链表所获得的

2.3 PCB如何描述

2.3.1 pid

pid是进程身份标识符(唯一的数字),每个进程都对应一个pid

勾选pid就能看到 

62b7f9bbbc394f1180cce56bc83f724c.png

2.3.2  内存指针

指向进程使用的资源

2.3.3 文件描述符表

硬盘上的文件等其他资源

也描述了进程使用了哪些资源

硬件资源,比如内存,硬盘,网卡这些是好划分的,不好划分的是cpu资源

电脑上运行的进程有很多,cpu却很少,打开设备管理器就能看到处理器

14249dedd4354e24870f1e3bc2068dad.png

这些进程希望能''同时运行''''分时复用''

并行:微观上同一时刻,两个核心上的进程是同时执行的

并发:微观上同一时刻,一个核心只能运行一个进程,但能对进程快速切换(宏观上就觉得这些进程是同时在运行的)

并行或并发统称为"并发",是由内核负责处理,应用程序感知不到

操作系统中的调度器负责让有限的cpu资源来调度执行很多的进程

2.3.4 进程调度相关属性

处理机:计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件。
处理机包括中央处理器,主存储器, I/O 接口。
处理机再加上外围设备eg:鼠标.键盘.等构成完整的计算机系统。

1.进程的状态

就绪状态:

指的是进程已经处于准备好运行的状态,即进程已经分配到除了cpu资源以外的所有必要资源,只要分到cpu,就能立即执行

如果系统中有多个就绪队列,会按照优先级将他们排成一个就绪队列

执行状态:

指的是进程已经获得cpu,程序正在执行的状态

单处理机只有一个进程处于执行状态

多处理机有多个进程处于执行状态

阻塞状态:

正在执行的进程由于发生(IO请求,申请缓冲区失败等)暂时无法继续执行的状态,即执行的过程受到阻塞了,操作系统会把处理及分配到另一个就绪状态的进程,让受阻塞的进程暂停运行,这种状态就是阻塞状态

2. 优先级

进程也是有优先级的,操作系统进行调度的时候,要了解京城的状态及调度信息,进程优先级就是一个描述进程使用处理机的优先级别的一个整数,优先级高的进程优先获得处理机

3. 上下文

处理机状态信息也称为处理机的上下文,上下文也就是处理机的各种存储器中的信息组成的,是程序运行的中间结果.

主要作用是:

当进程被切换的时候,处理机的状态信息也即上下文必要保存在相应的PCB中,以便于该进程重新执行时能再从断点处继续运行

保存上下文:把CPU中的寄存器的值保存到PCB

恢复上下文:把这些值恢复到寄存器中去

4. 记账信息

操作系统,统计每个进程在CPU上占用的时间和执行的指令数目,根据这个决定下一阶段是如何调度的

3. 内存管理

如何理解内存?

26b8439438e44ec3a78c8a9ae28ba33b.png

物理上是一个内存条,可以存储很多数据

内存可以想象成一个大走廊,有很多小房间,每个房间大小1Byte,并且房间还有编号从0累加,这个内存编号就是地址,这个地址是"物理地址"

内存有一个随机访问的特性,访问内存上的任意数据速度都很快,这个特点造就了数组访问时间复杂度事O(1)

实际上程序并不能直接获取到物理内存

这里我们引入了"虚拟地址空间"

 

直接使用物理内存地址,如果程序出现bug,影响是十分严重的,可能导致访问的内存越界,如果进程一出现访问越界,可能会影响到到进程二的执行,是因为进程之间使用的内存没有进行隔离开,所以可能会相互影响到

针对这个问题引入了''虚拟地址空间'',代码里不直接使用真实的物理地址,使用虚拟出来的地址

由操作系统和专门的硬件设备负责进行虚拟地址到物理地址的转换

 

如果进程一访问越界了,指针地址改变了之后,MMU硬件设备会及时的反馈一个错误,当前地址超出了进程一访问的范围,因此返回一个SIGN SEGEMENT FAULT信号,引起进程一崩溃

所以引入虚拟地址空间,主要是为了避免进程之间相互产生影响,也就是谁出bug了谁就崩溃,每个进程之间就是隔离的了,具有非常重要的意义

MMU是集成在cup中的硬件设备

这样虽然解决了进程间相互影响的问题,但是进程间也是需要数据交互的,所以需要一个"公共空间"来进行数据交互,就能解决进程间的通信问题

4.线程

4.1 认识线程

引入进程是主要目的是为了解决"并发编程"问题,当前cpu进入了多核心时代,为了进一步提高程序的执行速度,就要利用好多核cpu

但是进程消耗的资源和速度相对于线程来说还是慢了很多,进程在资源的分配和回收上的开销非常大,因此线程应运而生,线程也叫做"轻量级进程",它既能解决并发编程的问题,又同时能让创建销毁调度的速度更快一些

线程的轻量在于线程不用申请资源和释放资源,减小了很大一部分开销

每创建一个进程,就好像创建一个工厂,在进程创建一个线程,就好像在一个工厂里增加多条生产线,多条生产线公用一个资源,达到了资源复用的目的

4.2 进程与线程的关系

进程与线程的关系:进程包含线程,一个进程可以包含多个线程,也可以只包含一个线程(不能没有)

当第一个线程启动后,开销是比较大的,但是后面的线程使用的是和第一个线程相同的资源,开销比较小

那么线程使用的资源是哪些?

同一个进程里的所有线程之间,公用的资源:进程拥有的资源,主要包括内存,文件描述符表

也就是线程一申请的内存,后面的线程可以直接使用,线程一打开的文件,后序线程也可以直接使用

发展到现在,操作系统实际调度的时候,是以线程为基本单位来调度的,调度进程就相当与一个进程只有一个线程的情况,如果每个进程有多个线程了,每个线程是在cpu上独立进行调度的

因此,线程是操作系统调度执行的基本单位,每个线程都有自己的执行逻辑

一个线程也是通过PCB来调用的,所以一个进程可能包含多个PCB,但是同一个进程的pid是一样的,内存指针和文件描述符表也是相同的

4.3 线程安全问题

一个进程是可以包含多个线程的,但是增加线程的数量时,也不是一直能提高执行速度,因为cpu核心数量时有限的,线程太多了,核心数目有限,线程调度将会是很大的开销了

系统创建也是需要消耗资源的,创建过多的线程,会导致资源耗尽,别的进程也无法使用了,像cpu,内存,带宽这样的资源

还有一种情况,在不同进程中,每个进程都有自己的资源,不会出现争夺资源的问题,他们的资源都是创建的时候就分配好了,但是线程模型是资源共享的,很容易就触发多线程争抢同一个资源,即一个进程中会出现多线程同时使用一个资源的情况,造成了线程不安全问题

多线程还有另一种情况,当一个线程抛出异常,如果没有处理好,整个进程可能都会崩溃,那么其他线程也寄了

 

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

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

相关文章

[附源码]计算机毕业设计springboot电子相册管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Git 入门 拉取仓库和推送仓库

目录 基本操作 本地建立仓库并推送到远端仓库 关联仓库失败 解决方法 从远端仓库拉取文件到本地 私有的仓库的连接 修改 提交者名称 IDEA/Pycharm等如何使用git 如何关闭git 功能 Git操作主要分为两类 ,如何把自己建的项目同步的网上的仓库,如何…

OpenHarmony编译系统

GN 简介 直接百度 GN 入门 可以参考下面的示例,作为入门参考学习https://blog.csdn.net/weixin_44701535/article/details/88355958https://gn.googlesource.com/gn//main/docs/reference.mdhttps://chromium.googlesource.com/chromium/src/tools/gn//48062805e…

Java项目_在线点餐系统(jsp+sevlet+mysql)(含论文)

在线点餐系统(jspsevletmysql一、系统介绍二、功能展示1.主页(用户)2.菜单(用户)3.用户注册(用户)4.用户登陆(用户)5.我的订单(用户)6.餐桌管理(管理员)7.菜系管理(管理员)8.菜品管理(管理员)9.订单管理(管理员)三、获取源码一、系统介绍 系统主要功能: 用户&#…

4位资深专家多年大厂经验分享出Flink技术架构设计与实现原理

时间飞逝,转眼间毕业七年多,从事 Java 开发也六年了。我在想,也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试…

bootstrap下拉菜单学习(五)

组件:下拉菜单 bootstrap字体图标和下拉菜单组件的使用 这些图标都存在我们引入的font文件夹内: 复制bootstrap所用的包: 创建html页面: 图标不仅可以直接放文本里面, 还可有结合按钮去用。 要使用组件:不…

《网络空间测绘技术与实践》正式发售,让网络空间作战“有图可依”

近日,多位业界专家力推,由知道创宇CEO赵伟、CTO杨冀龙、CSO黑哥(周景平)等撰写的著作《网络空间测绘技术与实践》,正式出版并发售。网络空间已成为继“陆、 海、空、天”后的第五大空间,网络空间亦需要类似…

【uni-app高频面试题——精品一】

uni-app高频面试题谈谈你对uni-app的理解🍕uni中如何为不同的平台设置不同的代码uniapp中封装接口请求相较于微信小程序有什么要注意的uni-app中的本地存储数据和接收数据是什么✊uni-app 路由与页面跳转💪uni-app全局变量怎么定义,怎么获取&…

【Python实战】“特种兵”们的专属游戏助手,助你吃鸡:极品小助手也是棒呆了~(“大吉大利,今W吃鸡”)

前言 有温度 有深度 有广度 就等你来关注哦~ 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 “注意左边,左边有人,打他!” “快上车!&#xff0…

Spring Security(十九)--OAuth2:实现授权服务器(下)--环境准备以及骨架代码搭建

一、前言 本章我们将在上一章代码骨架搭建好的前提下对三种授权类型进行测试以及讲解如何配置授权服务器以颁发刷新令牌,所以本章是一个比较轻松的章节,但是唯一的要求就是需要小伙伴们对上一章内容要完成代码的搭建,否则这章学习也不知道个…

[附源码]计算机毕业设计springboot飞越青少儿兴趣培训机构管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

嘉创房地产冲刺港交所:半年营收4.7亿 现金及现金等价物减少

雷递网 雷建平 11月28日嘉创房地产控股有限公司(简称:“嘉创”)日前递交招股书,准备在港交所上市。半年营收4.73亿嘉创为一家精品住宅物业发展商,主要在大湾区的东莞、惠州及佛山迅速发展的住宅市场(如东莞…

m半分布式JAC联合接纳控制与用户位置信息的垂直切换matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着无线通信技术的飞速发展,为支持多种不同无线接入技术、不同系统间协作、不同业务类型及终端差异性等需求,未来的无线网络将是一种协作式的异构网络融合架构&#xff0…

文理导航杂志文理导航杂志社文理导航编辑部2022年第12期目录

专题研究《文理导航》投稿:cn7kantougao163.com 初中科学生活化作业优化策略 唐黎娜; 4-6 揭密2022年新高考1卷解析几何解答题 陈思伽; 7-9 初中数学错题资源的有效运用 王丹; 10-12 浅谈陶行知思想在初中体育教学中的应用 王树华; 13-15 高中数…

Error: error:0308010C:digital envelope routines::unsupported(vue2项目报错)

问题描述 在 终端输入 npm run dev 命令,项目运行报错 Error: error:0308010C:digital envelope routines::unsupported 问题原因 node 版本过高,可以在命令行 输入 node -v 查看版本 因为 Node.js 版本是 17 以上所以会运行失败, Node.j…

MySQL为自动编号的字段赋值

insert users values(NULL,ming,fasdfasdfasd,22,1); 或者 insert users values(DEFAULT,ming,fasdfasdfasd,22,1);

分布式消息中间件RabbitMQ解析

RabbitMQ作为分布式消息存储和转发系统,已广泛使用于分布式系统中。本文简要介绍RabbitMQ相关概念、集群架构和消息转发流程,并与Kafka做了简要对比,以加深理解。 1、RabbitMQ相关概念 1.1 AMQP介绍 消息(Message)是…

【uni-app】详细总结uni-app基础知识和如何配置项目,运行到模拟器和小程序端,附案例和图(建议收藏)

1- uni-app 简介 1.1 介绍 uni-app 是一个使用 Vue.js 开发所有前端应用的框架。 开发者编写一套代码,可发布到 iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。 详细的 uni-app 官方文档&#…

煤炭行业数据库-煤炭价格、消耗量、发电量分省市民用电、工业用电数据

(1)煤炭行业数据库 1、数据来源: WIND数据库煤炭资源网 2、时间跨度:至今 3、区域范围:全国 4、指标说明: 包含指标如下 煤炭价格 国际煤价(周) 秦皇岛煤炭价格(…

【仿牛客网笔记】项目进阶,构建安全高效的企业服务——优化网站性能

Caffeine是最好缓存工具 登录凭证和用户有直接关联不适合存放在本地缓存 本地缓存和redis缓存的区别 本地缓存的效率高 整个缓存在使用的过程中详细流程 caffeine的使用 caffeine的使用手册 affeine的导包 设置自定义参数 去优化查询的方法,通常优化的是Servi…