一文即可帮助你认识进程和线程~

本文的重点:什么是:进程、进程调度、线程和他们之间的联系。主讲概念知识,不讲代码实现

目录

一、认识进程

1.什么是进程

2.进程的信息

3.进程调度(***)

4.进程调度的基本过程

二、线程

1.线程的引入

2.什么是线程

3.进程于线程的联系区别


前置知识:我们写的代码是如何操作系统的

写了一个打印字符串的代码

1)应用程序执行println,调用系统提供的api

2)操作系统内核里,感知到要执行操作显示器的行为

3)操作系统内核,通过驱动程序,找到对应的硬件设备(显示器),并执行“显示字符串”操作

类似去食堂打饭,想要某个菜,并不是自己去抓取,而是通过食堂阿姨去操作。

我需要吃饭==执行程序,告诉阿姨==调用api,阿姨听到了==感知到我要吃饭,通过阿姨的眼睛找到了大白菜==通过驱动程序找到…… 

一、认识进程

进程,就是运行起来的程序等等,这是对进程最基本的概念

1.什么是进程

1.1.概念

(1)一个程序,允许起来,在操作系统中就会出现一个进程;可以理解成进程就是一个跑起来的程序。

(2)进程是程序的一次执行,是一组指令的集合。

(3)进程可以视为是 操作系统进行资源分配的基本单位 。

1.2.查看进程

1.3.进程运行的条件

(1)进程可以运行起来,是必须要消耗一些系统资源的。(跟人要吃饭一样)

(2)需要的资源

cpu,内存,硬盘,网络带宽,显卡等等很多资源

(3)查看进程消耗的资源

(4)进程的作用

        进程可以视为是 操作系统进行资源分配的基本单位!

2.进程的信息

背景

当操作系统中的进程多起来之后,就需要对其进行管理,和分配资源,于是就出现了一些操作,用来对进程进行管理操作。

2.1.管理进程的方式

(1)通用手法:描述+组织

(2)如何描述和组织

描述:一般通过一些结构体/类,把一个进程的核心信息抽象提取出来,并进行表示(就是对一个东西就行描述,比如进行有哪些东西,描述出来)。

管理:通过一定的数据结构,把多个这样的结构体/类的对象串起来,方便进一步的各种增删查改。

(3)如何描述Ⅱ

使用名字为:PCB 的结构体描述,再使用类似链表的数据结构组织。

所以,进程的核心信息都存储在PCB的结构体中,下面了解PCB就可以了解到进程有哪些信息。

2.2.PCB的核心信息(**)

(1)pid (2)内存指针 (3)文件描述符表 (4)状态、优先级、上下文、记账信息

其中第(4)是为了支撑 进程调度而产生的。

这四点我们下面分别介绍。

2.3.pid

(1)作用:唯一身份标识,标识一个进程。就像人的身份证

(2)查看进程的pid值

(3)总结

同一个机器,同一个时刻,进程id一定是不同的 

2.4.内存指针

(1)内存指针,实际上就是一组指针

(2)作用:指针,就是 指向 进程所需要的 资源在内存中的位置。

(3)哪些资源?

1. 硬件资源 2.内存资源 3.指令资源 4.依赖的数据(进程的状态)

(4)指令的作用

进程是一组指令的集合,有了指令,才知道进程接下来要做什么(比如:调用显示器等等)

2.5.文件描述符表

(1)用来记录打开的文件,结构类似顺序表

(2)作用:在进程运行的时候,会打开一些文件;而文件描述符表就会记录下来,进程都打开过哪些文件。

目前用处较少,后期还会继续介绍。

2.6.状态、优先级、上下文、记账信息

这四大属性存在是为了支撑进程调度而存在。下面先简单的介绍这四个属性,然后再介绍进程调度。

2.6.1状态

进程/线程的状态大概有五种

(1)新建态 (2)就绪态 (3)运行态 (4)阻塞态 (5)死亡态

2.6.2.优先级

这个属性,用来决定给进程分配时间的多少

2.6.3.上下文

(1)上下文,类似于书签

(2)作用:

进程第一次被调度到cpu上工作,一会后被调走,此时需要记录一些工作的进度;当第二次调度回来后,就可以继续执行。

2.6.4.记账信息

(1)用来标记每个进程所 分配到的资源大小

(2)作用:可以更好的分配系统资源,防止一些进程无法分配到(可以尽量做到雨露均沾)

3.进程调度(***)

背景引入:

在一个操作系统中,进程的数量远远大于cpu的数量(目前cpu都是多核心的,一个核心同一个时间只能执行一个进程)。有那么多的进程,是无法同时运行的,所以有了进程调度。

3.1.进程调度概念

(1)进程调度,可以说是一种手段

(2)进程调度的作用

根据不同的条件,将一个进程分配到cpu(或cpu上的核心)运行。

(3)如何调度 

根据上面提到的进程中四大属性(状态、优先级、上下文、记账信息),加上一些特定的算法和规定,选择合适的进程并将其分配到cpu上进行运行

3.2.调度的效果

进程调度一般是产生并发执行的效果,下面通过半道理的方法来说明。

(1)并行执行

一个cpu,存在一个或者两个核心。一个核心,同一个时刻,只能运行一个程序;一般的系统中都存在多核心(我们以16核心举例),这个时候,就是16个核心上面同时有16个进程。这16个进程是完全同时执行的,这种情况我们称为并行执行

(2)并发执行

同一个核心,同一个时刻不能执行多个进程,但是不同时刻,可以执行不同的进程(分时复用)。

cpu就会把总的执行时间,分割成许多小的时间段;在每个小的时间段里面,执行一个进程,因为时间极短,人感知不到,因此可以认为是很多个进程在“同时执行”,这就称为并发执行,也就是进程调度的基本体现。

(3)我们把并发执行+并行执行 统称为 《并发执行》

3.3.深入理解调度

这里借用一个《渣女小故事》,结合进程的四大属性(状态、优先级、上下文、记账信息)来更好的理解。

(1)故事背景设置

背景:重生了,我是一个才貌双全的女孩子。所以,追我的男生从这里排到了法国,因此,我有了选择男朋友的权利。

选择男朋友的标准:(1)高 帅(2)富 (3)会添 

但是同时具备三个条件的男生:很少/具备也看不上我

做法:同时谈三个,分别为:A(高帅)  B(富)  C(超级无敌三百六十度螺旋添)

为了防止被他们发现,只能运行《时间管理》对他们进行分时复用,也就是进行合理的调度。

在微观上,我是同一个时间只和一个小哥哥在一起;宏观上,我在和三个小哥哥同时在一起。

而调度发挥的作用就是:可以合理的安排时间

(2)进程的状态

在上面的时间表中,需要考虑到三个小哥哥的状态。

1)三个小哥哥随叫随到。在操作系统中,称为进程的就绪状态

2)有个小哥哥有事,无法随叫随到。在操作系统中,称为:进程处于阻塞状态

所以进程的调度就会根据不同的进程分配不同的时间。

(3)进程的优先级

三个小哥哥,我会根据给我的价值,对他们分配不同的时间。如给A分配的时间就会更多,B其次,C最少。

(4)进程的上下文

在和小哥哥约会的时候,有些事情未完成,就会记录下来这次,等到下次执行的时候就可以恢复

(5)进程的记账信息

通过一个表格,记录给每个小哥哥分配的时间,当分配时间少的时候,就适度加多时间。

每个进程都有自己的属性(如状态、优先级这些)

4.进程调度的基本过程

(1)进程的创建 (创建自己的PCB,并加入链表中)--进程的新建态

(2)就绪队列管理  (如:进程的优先级,进行排队)--进程的就绪态

(3)进程选择  (根据一些特定的算法,选择合适的进程)

(4)进程切换  (涉及上下文,当前的进程分配到cpu上,记录该线程在硬盘上的数据)

(5)进程执行(在cpu上进行执行)--进程的运行态

(6)阻塞和唤醒(如进行IO操作,如:Scanner时;此时就会先调度其他的进程)--进程的阻塞态

(7)终止(进程的任务完成,就会被移除就绪队列)--进程的死亡态

二、线程

线程是一个轻量级的进程,是系统调度执行的基本单位

1.线程的引入

(1)背景

利用多个cpu核心完成同一个任务----->引入多进程编程------>多进程编程存在问题(而且Java中也不太支持)------->引入多线程编程

(2)两个原因

1)需要把多个核心利用上 

2)多进程编程,需要消耗的资源很大,时间慢,俗称:大重量。

2.什么是线程

2.1.线程由来

(1)线程其实是进程的一部分

(2)一个进程,最少有一个线程,也可以包含多个线程

2.2.线程与PCB

前面提到,PCB是描述一个进程的;本质上,一个PCB是描述一个线程的,多个PCB就构成一个进程。所以说,进程中有的,线程中都有。

(1)线程的PCB信息

pid、内存指针、文件描述符表、tgid、状态、优先级、上下文、记账信息。

(2)不同线程共享的信息

内存指针、文件描述符表、tgid

(3)线程单独一份的信息

pid、状态、优先级、上下文、记账信息

3.进程于线程的联系区别

3.1.区别
名字/不同点进程线程

资源

占用

进程是分配资源的最小单位。不同的进程之间,拥有的资源不一样.不同的线程之间,共享一部分进程的资源

执行

方式

不同进程的地址空间不一样,一般一个进程崩溃后,不会影响其他的进程线程没有单独的地址空间,当一个线程崩溃后,可能影响所有的线程

调度

速度

进度调度较慢线程调度较快

系统

开销

系统开销大,创建/销毁慢系统开销小,创建/销毁快
3.2.联系

(1)一个程序至少拥有一个线程,一个进程至少拥有一个线程;线程是组成进程的基本单位

(2)线程是进程内的一个执行单元,也是进程内可以调度的实体。当进程分配到资源时,该进程中的所有线程共享该资源。所以真正在处理机上运行的是线程

(3)进程和线程都可以并发执行,提供程序的执行效率。

(4)进程是系统分配资源的基本单位;线程是调度执行的基本单位。

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

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

相关文章

Oracle监听报错TNS-01189

测试环境无法连接数据库,怀疑监听没有启动查看监听状态 lsnrctl status查看监听状态发现监听确实没有启动,start监听却出现TNS-01106: Listener using listener name LISTENER has already been started ps -ef | grep -i tns通过ps查看,发现…

品牌百科词条创建包括哪些模版?品牌百科词条文案如何写!

品牌百科词条是一个旨在为用户提供品牌相关信息的平台,今天腾轩科技传媒来讨论一下如何创建一个优质的品牌百科词条。首先,要点之一是确保信息的准确性。在创建品牌百科词条时,我们必须确保所有信息都是准确的,这包括品牌的历史、…

快速申请通配符证书

通配符证书又名泛域名证书,是一种SSL/TLS证书,用于保护多个域名。是由域名字段中的通配符*表示。通配符证书最大的亮点在于可以通过绑定一个主域名,从而间接绑定无数的次级子域名。等同于通配符证书可以绑定无数的域名,在一些特殊…

【C++】搜索二叉树

1. 二叉搜索树 a. 二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根…

解决方案:如何安装neo4j软件

文章目录 一、安装JDK二、安装neo4j 一、安装JDK 第一步先安装JDK,因为neo4j环境需要JDK,过程比较多,截图如下: 安装JDK网址 https://www.oracle.com/java/technologies/downloads winR,输入cmd,再输入j…

【Faster Bing】Bing 搜索结果取消跳转至 bing.com/ck

更快的 Bing (Faster Bing) 1. 介绍 项目地址: GitHub: https://github.com/jiang-taibai/faster-bingGitee: https://gitee.com/jiang-taibai/faster-bingGreasyFork: https://greasyfork.org/en/scripts/490999-faster-bing 在使用 Bing 搜索时,Bin…

如何遍历整个DOM树

原文链接:[如何遍历整个DOM树(外网原文链接)](https://chrisdeo.github.io/2019/07/20/%E5%A6%82%E4%BD%95%E9%81%8D%E5%8E%86%E6%95%B4%E4%B8%AADOM%E6%A0%91/) 作为前端开发工程师,我们大部分工作内容其实还是围绕着DOM在进行Javascript的编写&#xf…

AMD本月发布的成本优化型Spartan UltraScale+ FPGA系列

随着 FPGA 在更多应用中的使用,AMD 推出了最新的成本、功耗与性能平衡的系列产品。为了扩展其可编程逻辑产品组合,AMD最近推出了最新的成本优化型 Spartan FPGA 系列。随着 FPGA 应用于越来越多的产品和设备,设计人员可能经常发现自己正在寻找…

前端实现浏览器自定义滚动条

前言: 最近有个项目,产品觉得浏览器默认滚动条太丑了。想美化一下,比如自定义颜色,加上圆角,宽高都要更改一下。我查了资料和文档总结了一下 写法,特此记录以便之后使用。 浏览器滚动条api 总结&#xff…

git基础-tagging

tagging 与大多数版本控制系统一样,Git具有将存储库历史中的特定点标记为重要tag的能力。通常,人们使用此功能来标记发布点(例如v1.0,v2.0等)。在本节中,将学习如何列出现有的标签,如何创建和删…

智慧公厕的技术融合策略

智慧公厕是迎合现代城市发展需要的一项重要基础设施,其设计的技术融合策略在实现公共厕所泛在感知、互通互联、协同构筑智慧城市等方面起到了关键作用。本文将以智慧公厕源头实力厂家广州中期科技有限公司,大量精品案例现场实景实图实例,从物…

【MybatisPlus-updateById】| 更新字段失效 | 很难受的一个BUG

目录 一. 🦁 写在前面二. 🦁 探索过程三. 🦁 原理解释四. 🦁 最后 一. 🦁 写在前面 如题所言,很难受!!! 原因是 🦁 在写项目的时候,使用 Mybatis…

Docker大全

Docker大全 Docker安装准备工作开启虚拟机系统卸载Docker在线安装Docker离线安装Docker Docker服务基本操作启动docker服务查看docker状态设置docker开机自启禁用docker开机自启重新启动docker服务查看docker信息查看docker info中具体key的信息停止docker服务docker镜像加速 D…

高效沟通:总裁口才提升之道

高效沟通:总裁口才提升之道 在当今这个信息爆炸的时代,沟通已经成为了企业与个人之间不可或缺的一部分。而对于企业的总裁来说,良好的口才更是其领导力的体现和成功的保障。因此,如何提升总裁的口才,实现高效沟通&…

2024运维堡垒机品牌排名看这里!

2024运维堡垒机品牌排名看这里! 1、行云管家 2、天磊卫士 3、阿里云 4、华为云 5、安恒 6、JumpServer 7、山石网科 8、齐治 9、启明星辰 10、奇安信 11、迪普科技 12、腾讯云 13、中远麒麟 备注:以上排名不分先后 运维堡垒机定义 运维堡…

Chrome 插件打包发布

插件打包发布 一、打包成 zip 包 最简单方便的一种其实就是打包成 zip 包,通过下载链接进行下载,在包里面通过设置版本号和数据库的版本号对比来提醒用户进行新包的下载。 二、发布到 Chrome 应用商店 1. 注册成为开发者 在发布到 chrome 应用商店之…

Linux系统使用Docker部署MongoDB数据库并实现无公网IP远程访问

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署Mon…

【Java程序设计】【C00387】基于(JavaWeb)Springboot的校园食堂订餐系统(有论文)

基于(JavaWeb)Springboot的校园食堂订餐系统(有论文) 项目简介项目获取开发环境项目技术运行截图 博主介绍:java高级开发,从事互联网行业六年,已经做了六年的毕业设计程序开发,开发过…

企业如何申请邓白氏编码(DUNS)呢?

尤其是食品企业,药品企业在申请美国FDA认证的时候,经常会听到一个名词——“邓白氏编码”,申请邓白氏编码是企业顺利完成FDA注册认证的必要前提,因此都需要提供邓白氏编码。 今天,小编就来为大家详细介绍下邓白氏编码…

前端大文件分片上传

1.分片上传整体流程 开始上传:前端启动文件分片上传。后端返回唯一标识。分片上传:获取到上传的文件,然后设置一个固定的分片大小,将文件切成多个小片,计算出每一个分片的MD5值(32位)。将每个分…