JavaWeb语法一:进程和线程的区别与联系

news2024/9/23 0:38:03

目录

1.进程的概念

1.1:进程控制块抽象(PCB)

1.2:进程调度的相关属性

1.2.1:进程的状态

1.2.2:优先级

1.2.3:上下文

1.2.4:记账信息

2:进程的虚拟地址空间

3.线程

3.1进程和线程对资源的区别

3.2:如何描述线程

3.3:线程问题

3.3.1:线程数量过多

3.3.2:线程不安全

3.3.3:线程不安全的延申

4.进程和线程的联系

5.进程和线程之间的区别(面试题)


1.进程的概念

进程就是操作系统时一个正在运行的程序的一种抽象。可以把进程看作程序的依次运行过程,进程是操作系统进行资源分配的最小单位。

 知道进程的基本概念,就要进一步了解怎么描述一个进程,就像你知道一个美女,但你要知道怎么描述一个美女给你朋友。

进程是通过进程控制块来进行描述进程。

是通过双向链表把多个PCB给串到一起来进行组织的。

1.1:进程控制块抽象(PCB)

1.进程的唯一标识 pid

就相当于每个人的身份证一样。

2.进程关联的程序信息---内存指针

指明自己运用了哪些内存。

3.文件描述符表

硬盘上的文件等其他资源。

4.进程调度的相关属性

接下来,会详细的讲解。

1.2:进程调度的相关属性

打开QQ是一个进程,打开微信是一个进程.....这么多进程又是如何的分配资源了,这里就要说起操作系统中一个中重要的调度器CPU。

我的电脑只有8个cpu,难道只能一次调用8个进程。这当然是不行的呀!,所以我们希望进程是同时运行,分时复用。这又是什么意思呢?这就引出了并行和并发的两个概念。

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

并发:微观上统一时刻,一个核心只能运行一个进程,但是它能对进程快速的切换。就好像一个cpu上多个进程不停的切换。

例如:并行,就是两个人喂两个小孩。

           并发,就是一个人喂两个小孩,一个小孩吃一口,轮流的吃。

从这里就引出来进程状态。

1.2.1:进程的状态

就绪状态:随叫随到,进程时刻准备着去CPU执行。

运行状态:正在CPU上执行。

堵塞状态:一定时间内,无法到CPU上执行。

1.2.2:优先级

CPU进行多线程进行调度的时候,是按什么规律来进行调度的?在进行进程调度的时候,CPU是不会一碗水端平的,也是有优先级。

1.2.3:上下文

操作系统在进行切换的时候,就需要把进程中间状态记录下来,保存好,下次直接恢复到上次的状态。这上面的这段操作就类似于游戏中的"存档“,"读档"。

上下文本质就是你存档的内容。进程中的上下文就是CPU中的各个寄存器(CPU内置的存储数据的模块,保存的就是程序过程中的中间结果。)的值。

保存上下文:就是把这些CPU寄存器的值,记录保存到PCB中。

恢复上下文:就是把PCB中的这些寄存器值恢复回去。

1.2.4:记账信息

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

2:进程的虚拟地址空间

在程序中所获取的内存地址,并非是真实的物理内存的地址,而是经过了一层抽象,虚拟出来的地址。正如c语言的指针,这里的内存地址,就是虚拟的内存地址,并非真实的物理内存地址。

如果用真实的内存进程,一旦进程1不小心访问的内存越界就又可能导致越界的这段内存的该进程也出现崩溃,无法使用。这就引出来虚拟地址空间。

 假如进程1访问内存的时候,操作系统内核该地址是否超出进程1的访问范围,如果超出,就会直接向进程反馈你一个错误(SIGN SEGEMENT FAULT)会引起该进程的崩溃,而其他进程不会收到影响。

虚拟地址空间,让进程使用的内存空间,进行"隔离"起来。主要就是为了避免进程之间相互产生影响。

以上就是进程的知识,接下来我们要了解一下,什么是线程。

3.线程

进程和线程都是解决并发编程的问题,但进程都可以实现并发编程,为什么又要提出线程这个概念呢?

正就是因为进程太重了,这里的重,是主要就是重在"资源分配/回收"上,具体的来说:创建一个进程,开销大;销毁一个进程,开销也比较大,调度一个进程,开销还比较大,这样就使消耗资源多,速度慢。在这个追求速度的世界,线程应运而生,故线程也叫做“轻量级进程",它为啥轻呢?因为它把申请资源/释放资源的操作给省下来了。

3.1进程和线程对资源的区别

这个我们就来举一个例子,假如你有一个餐馆,生意很好,你餐馆的位子不够,这时候你要增加座位。

进程:

这就是进程,它决定开一个分店,那你就需要一个新的送菜,新的地方,新的餐桌,你在等这些新的资源,是不是需要大量的时间,而这些新的在操作系统都是资源。这就说明开一个进程,需要分配资源。

线程:

 线程就打算在店外面多加几套桌椅。这样这些增加的桌椅可以共同使用之前的资源,可以节省时间。就这样剩下了申请资源的操作,从而达到轻量。

3.2:如何描述线程

前面介绍的PCB 里的状态,上下文,优先级,记账信息,都是每个线程有自己的,各自记录各自的。但是同一个进程里的PCB之间,所有线程的pid ,内存指针和文件描述附表也是一样的。

3.3:线程问题

3.3.1:线程数量过多

上面讲述了开辟线程会节省时间,但多个线程会不会,使得时间搜快搜快的呢?答案是不是的!

假如你想找三个人分别给你扎头发,化妆,配礼服,但是那三个人又带了自己的闺蜜,你瞬间有六个人,但其中两个人一直在商量,哪套衣服更好,一直决定不下来。

上述问题拿到操作系统上,增加线程数量,也不是可以一直提高速度,一个人只能穿套礼服(CPU核心数量是有限的)太多人一起决定穿哪一套,反而拖慢了速度。线程数量太多,核心数目有限,不少的开销反而浪费在在线程调度上

3.3.2:线程不安全

举例子:

假如有一天,三兄弟收到了一个任务,要去吃一只鸡,大哥吃了一只鸡腿,告诉二哥和小弟说:”这鸡腿是我吃过最好吃的",二哥和小弟听了此话,都去抢另一个鸡腿,还为此打架起来。

上述问题拿到操作系统上,两个线程同时访问同一个公共变量。此时就会出现线程不安全问题。

3.3.3:线程不安全的延申

接上面的例子,大哥最后一把夺过鸡腿,给了小弟,这时候二哥火了,瞬间就把桌子给掀翻了,哦吼!大家都吃不了。

这就是一个线程抛异常了,如果处理不好,很可能把整个进程都给带走。其他线程也就挂了。

4.进程和线程的联系

1,进程包含线程,每一个进程至少有一个线程(只有第一个线程启动的时候,开销比较大)。

2,同一个进程的多个线程之间,共用了进程的同一份资源。

5.进程和线程之间的区别(面试题)

1.本质区别:.进程是资源分配的最小单位,线程是系统调度的最小单位。

2.从属关系:进程包含线程,线程属于进程。

3.开销不同:进程的创建,销毁,调度的开销都远大于线程。

4.资源拥有不同:进程和进程之间不共享内存空间,每个进程都有自己独立的内存和资源。同一个进程的所有线程之间共享同一个内存空间。


总结:

以上就是我总结的进程和线程的知识点,若有错的,或是不太准确的,请各位铁子留言指错,若感觉不错,请一键三连。

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

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

相关文章

算法与数据结构29:四边形不等式技巧

四边形不等式技巧题目一题目二题目三四边形不等式技巧题目四题目五题目一 给定一个非负数组arr,长度为N, 那么有N-1种方案可以把arr切成左右两部分 每一种方案都有,min{左部分累加和,有部分累加和} 求这么多方案中,mi…

我当PM,把ChatGPT玩冒(bà)烟(gōng)了

最近ChatGPT太火,本拐也注册了一个。用着确实是十分上头。而且事实证明,在处理明确的工程类业务时,ChatGPT可以让程序员事倍功半(也有可能饭碗不保🙈)参见: 跟着ChatGPT手把实现一个websocket连…

数据管理 Valentina Studio Pro 12.6 Crack

Valentina Studio 被描述为与 MySQL、SQL Server、Maria DB、SQLite、PostgreSQL 以及最后但并非最不重要的 Valentina DB 数据库一起用于工作流程的数据库工具的通用管理。Valentina Studio 能够允许用户和开发人员连接所有重要的数据库并运行查询,以及创建图表以了…

Hadoop如何保证自己的江湖地位?Yarn功不可没

前言 任何计算任务的运行都离不开计算资源,比如CPU、内存等,那么如何对于计算资源的管理调度就成为了一个重点。大数据领域中的Hadoop之所以一家独大,深受市场的欢迎,和他们设计了一个通用的资源管理调度平台Yarn密不可分&#x…

高性能缓存Caffeine的基本使用方式

文章目录介绍性能比对使用方式一、Population(缓存类型)1.Cache2.Loading3.Asynchronous (Manual)4.Asynchronously Loading二、Eviction(驱除策略)1.Size-based(基于容量)2.Time-based(基于时间…

Redis Cluster 单机部署

高可用架构-Redis Cluster Redis服务器支持单机、主从复制、Sentinel、集群部署,部署架构也是由简单到复杂,Redis Cluster 集群架构是官方推荐应对大数据量、大并发场景部署方案。Redis的架构变迁如下图所示,其归属就是Redis Cluster Redis …

一款功能强大的课程报名系统 v6.2.0

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 课程报名系统可为专为教育培训机构设计的在线选课报名系统,学员可综合考虑课程分类、适合人群、上课地点、上课时间、课程价格等多种选报最合适的班级 课程报名系统发布v6.2…

组件库技术选型和开发环境搭建

点击上方卡片“前端司南”关注我您的关注意义重大原创前端司南本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!专栏上篇文章传送门:基于Vite打造业务组件库(开篇介绍…

盘点和总结秒杀服务的功能设计及注意事项技术体系

秒杀应该考虑哪些问题 超卖问题 分析秒杀的业务场景,最重要的有一点就是超卖问题,假如备货只有100个,但是最终超卖了200,一般来讲秒杀系统的价格都比较低,如果超卖将严重影响公司的财产利益,因此首当其冲…

0代码20min |微信接入chat-GPT

0代码20min | 微信接入chat-GPT 拥有一个openai账号 这个账号比较麻烦,需要国外手机号认证,这个的话可以直接参考这篇文章ChatGPT注册攻略 - 知乎 (zhihu.com),这篇文章是用在线接受短信的虚拟号码 - SMS-Activate这个网站来注册账号的。 用…

《操作系统》期末考试试卷2参考答案

《操作系统》期末考试卷(第2套) 参考答案与评分标准 一、单项选择题(共15题,每题2分,共30分) 题 号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答 案 D A C C B A D D A B D C A B D 二、填空题(…

ADI Blackfin DSP处理器-BF533的开发详解31:汉字/ASIC II 字库(含源代码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了汉字库和 ASIC II 码 字库的功能,代码会在编译时,将字库文件加载到内存中,所以必须使用 …

软件测试基础篇(6)

两个测试模型: 一:软件测试V模型:从上到下是一个开发模型,从下到上是一个测试模型(V模型也是瀑布模型的一个变种) 需求分析--->计划---->设计---->编码----->测试 用户需求 验收测试需求分析与…

java基于springboot的共享单车系统-计算机毕业设计

项目介绍 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Ma…

合并有序数组

目录 I.合并有序数组 Time Limit:1s Memory Limit: 256M Description: Input: Output: Sample input: Sample output: 约束: 思路代码: 1.暴力法 1.2暴力代码: 2.双指针(归并排序思路) 2.2双指针代码 总结: 题目链接: I.合并有序数组 Time Limit:1s Me…

专注推荐系统13年,我收获最大的4个成长

‍‍ 作者 | gongyouliu编辑 | gongyouliu我从2010年开始接触推荐系统,到现在差不多有13年了,这13年间我基本没有间断过对推荐系统的学习和实践(今年还看了两本推荐系统相关的书籍和一些论文)。回顾一下这十几年的经历&#x…

Java项目:SSM高校教职工差旅报销管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能: 管理员登录,修改管理员资料,用户管理,公告管理,报销类型管理,系别信息管理,报销审核管理等功能。 用户角色…

Python webdriver.Chrome()的使用

1.前提 Python与Chrome路径下均安装chromedriver.exe。 2.chromedriver.exe版本选择及下载 下载地址为:http://npm.taobao.org/mirrors/chromedriver/ Chrome版本查看:浏览器右上角三个点->帮助->关于Google Chrome 找到对应的版本,主…

大数据面试之YARN常见题目

大数据面试之YARN常见题目 1 YARN工作机制 1.1 图解 上面有单词少个r,就不改了,大家知道就行。 1.2 文字描述 文字版描述: 1、MapReduce程序提交到Client所在节点,在MR程序的主函数当中有job.waitForCompletion()将任务进行提…

Linux网络-五种IO模型

Linux网络-高级IO零、前言一、什么是IO二、五种IO模型1、阻塞IO2、非阻塞IO3、信号驱动IO4、IO多路转接5、异步IO三、高级IO重要概念1、同步通信 vs 异步通信2、阻塞 vs 非阻塞3、其他高级IO零、前言 本章主要就Linux网络讲解非常重要的一个话题-高级IO 一、什么是IO IO是输入i…