JavaEE(系列一 )-- 计算机是如何进行工作的

news2024/11/28 12:35:43

目录

1. 操作系统

2. 进程/任务(Process/Task)

2.1 进程

2.2 进程管理

2.2.1 进程的结构体 

2.2.2 进程调度

2.3 并行 和 并发

2.4 内存分配 -- 内存管理(Memory Manage) 

2.5 进程间通信

3. 线程


1. 操作系统

操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。

操作系统有两个基本功能:
1) 防止硬件被时空的应用程序滥用(管理好各种硬件设备)
2) 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。(给软件提供稳定的运行环境)

2. 进程/任务(Process/Task)

2.1 进程

运行起来的程序就是进程.

使用任务管理器就可以看见当前设备正在运行的程序,这些程序就是进程,

2.2 进程管理

进程管理就是分为两部分

1.描述一个进程:使用结构体/类,将一个进程有哪些信息表示出来.

2.组织这些进程:使用一定的数据结构,把这些结构体/对象放在一起.

举例:

2.2.1 进程的结构体 

 进程的结构体(PCB)有那些属性?(核心)

1.pid : 每一个进程需要有一个唯一的身份标识.

2.内存指针:当前这个进程使用的内存是哪一部分.进程要跑起来,就要消耗一定的资源.

3.文件描述符表:

        文件: 硬盘上的存储的数据,往往都是以文件为单位进行整理的.进程每打开一个文件就会产生一个文件描述符(标识被打开的这个文件),一个进程可能会打开很多个文件,就对应了一组文件描述符,把这些文件描述符放在一个顺序表这样的结构,就构成了文件描述符表.就可以知道进程在运行的过程中使用了哪些资源.

4.进程是操作系统进行资源调度的基本单位.

2.2.2 进程调度

接下来这一组属性,都是描述和CPU资源相关的属性,这些属性都是辅助进行进程调度.

1.进程状态: 简单的认为,进程的状态主要是有两个:就绪态(该进程已经准备好,随时可以上CPU进行执行),阻塞态(该进程暂时无法上CPU进行执行)

 

2.进程的优先级:进程执行之间是有优先顺序的.

 

3.进程的上下文:

        上下文,就是描述了,当前进程执行到哪里这样的"存档记录",进程在离开CPU的时候就要把当前运行的中间结果进行存档,等到进程再次回到CPU上的时候,再恢复之前的存档信息,从上次的结果继续往后执行.

  

4.进程的记账信息:

        统计了每个进程在CPU上执行的多久,可以作为调度的参考信息.

补充: 

1. 这里的8核16线程是什么意思?

2.操作系统往往使用双向链表的形行来组织PCB的.

        创建了一个进程,就是创建了链表的节点

        销毁一个进程就是把链表的节点进行删除

        遍历进程列表就是在遍历链表. 

2.3 并行 和 并发

并行:同一时刻,两个核心同时执行两个进程,此时这两个进程就是并行执行的

并发:一个核心,先执行进程1,执行一会儿之后,再去执行进程2,再执行一会儿之后,再去执行进程3,此时只要这里的切换速度足够快,看起来,进程1 2 3就是“同时”执行的。这就是并发

上述电脑只有8个核心,也可以同时执行115个任务,这是通过并发+并行的方式来完成的。

这个过程完全是操作系统自身控制的,程序员是感知不到的。所以很多时候,就把并行+并发统称为并发。

并发程度更高的话,就可以成为高并发。比如一个核心(主体)并发的执行1w个任务就可以成为高并发。不过,这是没有具体的数据限度的。

2.4 内存分配 -- 内存管理(Memory Manage) 

操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰。

操作系统给进程分配的内存是以“虚拟地址空间”的方式进行分配的。每个进程访问的内存地址,都不是真实的物理内存的地址。

如图所示:

如上图所示:如果每个进程都直接访问物理内存的地址,如果进程1,出现了bug(比如数组下表越界,野指针等) ,可能进程2的内存也会受到影响.就不能保证操作系统的稳定性.对此:操作系统给进程分配的内存是以“虚拟地址空间”的方式进行分配的。每个进程访问的内存地址,都不是真实的物理内存的地址。如下图所示:

 

 站在这两个进程的角度看,他们的代码中操作的内存地址就是0x00-0xff这一段。这里访问的内存就会被操作系统自动映射到真实的物理内存上,但是进程自身感知不到实际的物理地址是啥。这时,遇到野指针就没事了。任何一个内存操作,都通过页表来翻译一下。如果遇到野指针,0x2ff,拿着这个地址,发现页表上就没有这个地址,无法翻译,也就无法真正的修改物理内存,也就不会对别的进程的内存数据造成干扰。

一个进程无法直接干预另一个进程的内存内容,“进程的独立性”,“每一个进程有自己独立的地址内容”,大大提升了操作系统的“稳定性”。

2.5 进程间通信

有时候,需要进程之间进行交互,互相配合。如果每一个进程直接访问物理内存,其实是没有隔离性,也就不需要进程通信,进程1直接把算好的结果,写到进程2的内存就行,那跟入室抢劫,没啥区别。

所谓进程间通信,就是在隔离性的前提霞,找一个公共的区域,让两个进程借助这个区域来完成数据交换。就是在隔离的前提下,做了一个小小的妥协~

操作系统提供的进程间通信具体实现方式比较多,有很多种:管道、消息队列、共享内存、信号……

在Java圈子里,主要使用文件,socket这两种方式来完成进程通信。


举例:

3. 线程

进程,是比较“重量的”,速度慢、消耗资源多。

创建一个进程,成本比较高。销毁一个进程,成本也比较高。调度一个进程,成本也比较高,多进程编程可以解决并发编程的问题,但不是一个高效的选择。

为什么进程是“重量”的呢?

主要是体现在资源分配上。资源分配往往是一个耗时操作。

线程,则是更轻量的进程。(轻量级进程)
 

资源分配:

比如系统要给进程分配一块内存

(1)系统就需要遍历自己的空闲内存的表(数据结构)找到一个大小差不多的空间,进行分配。

(2)很多个进程都在问系统申请资源,系统进行资源分配的时候,要一个一个来。

 线程如何解决资源分配这一个耗时操作呢?

线程约定,一个进程中可以包含多个线程。此时这多个线程每个线程都是一个独立可以调度执行的“执行流”这些执行流之间本身就是并发的。同时,这些线程共用同一份进程的系统资源。

意味着,对于线程而言,系统资源是已经分配好了的,创建线程就省下了分配资源开销

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

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

相关文章

谷歌I/O大会重磅发布:Bard编码能力优化后仍不支持中文,开发者选择CodeGeeX更佳

谷歌I/O大会今天凌晨发布,打出系列AI组合拳。除了发布升级版语言模型PaLM2之外,Bard能力也要起飞。 凭借改进的数学、逻辑和推理技能,Bard 现在可以帮助生成、解释和调试 20 多种编程语言的代码,开发者们需要输入prompt&#xff0…

C#从入门到入坟(原创不易,转载请注明出处)

文章目录 C# 基础篇0 环境部署1 Hello world1.1 两种框架1.2 创建项目的过程1.3 项目组成结构1.3.1 解决方案和项目1.3.2 程序集信息1.3.3 引用1.3.4 配置文件1.3.5 程序入口类 1.4 解决方案1.5 Debug 和 Release1.6 CSharp虚拟机初始1.7 .Net Framework混合语言开发1.8 托管代…

上下文感知的体素对比学习用于标签高效的多器官分割

文章目录 Context-Aware Voxel-Wise Contrastive Learning for Label Efficient Multi-organ Segmentation摘要本文方法有监督损失Context-Aware Contrastive Learning Loss for Unlabeled Voxels 实验结果 Context-Aware Voxel-Wise Contrastive Learning for Label Efficient…

GSMA-eSIM-官网规范说明

GSMA | eSIM Consumer and IoT Specifications - eSIM GSMA | eSIM Consumer and IoT Specifications - eSIMhttps://www.gsma.com/esim/esim-specification/ 架构、测试、技术规范 3.0版本 测试套件 EID的定义和分配 GSMA EID Definition and Assignment 合规性规范 自我评…

第十四届蓝桥杯青少组模拟赛Python真题 (2023年2月12日),包含答案

第十四届蓝桥杯青少组模拟赛Python真题 (2023年2月12日) 一、选择题 第 1 题 单选题 关于Python3.10,下列选项描述正确的是 ( )。 答案:B 第 2 题 单选题 下列数据类型中,哪一个是不可变的?() 答案:B 第 3 题 单选题 以下关于函数参数描述正确的是 ()。 答案:D 第 …

【JAVAEE】文件操作——IO

目录 💋1. 冯诺伊曼体系 🐷2. 内存与外存的区别 ✨3. 文件 🎁3.1 认识文件 ✌3.2 文件的管理 🍳3.3 文件路径 🎃3.4 文件的保存 👑3.4.1 文本文件 📷3.4.2 二进制文件 🎀3.5 文件系…

Python基本数据类型之一——set(集合)

Python基本数据类型之一——set(集合) 一、python集合定义 集合(set)是一个无序不重复元素的序列。基本功能是进行成员关系测试和删除重复元素。 二、创建方式 在Python中,创建集合有两种方式: 一种是用一对大括号将多个用逗号分隔的数据括起来。 另一种…

Vue3-黑马(九)

目录: (1)vue3-antdv-删除选中 (2)vue3-进阶-antdv-增改 (3)vue3-进阶-antdv-增改2 (1)vue3-antdv-删除选中 我们在表格中在加一列,做一个复选框&#xff…

【一起啃书】《机器学习》第六章 支持向量机

文章目录 第六章 支持向量机6.1 间隔和支持向量6.2 对偶问题6.3 核函数6.4 软间隔与正则化6.5 支持向量回归6.6 核方法6.7 一些问题 第六章 支持向量机 6.1 间隔和支持向量 给定训练样本集 D { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , y i ∈ { − 1 , …

【YOLO系列】--YOLOv4超详细解读/总结

YOLOv4(YOLOv4: Optimal Speed and Accuracy of Object Detection)(原文+解读/总结+翻译) 系列文章: YOLOv1论文解读/总结_yolo论文原文_耿鬼喝椰汁的博客-CSDN博客 YOLOv2论文解读/总结_耿鬼…

[免疫学]抗原递呈详解

目录 🧫1. 抗原递呈是什么 🧫1.1 MHCⅠ类分子 🧫1.2 MHCⅡ类分子 🧫1.3 MHCⅠ类分子 分子介导的抗原递呈 🧫1.4 MHCⅡ类分子 分子介导的抗原递呈 🧫1.5 抗原递呈细胞 🧫1.5.1 激活的树突状…

初识Linux篇:第三篇

初识Linux篇:第三篇 初识Linux篇:第三篇1.Linux中常见的通配符1.1*号通配符1.2 ?通配符1.3[ ]通配符1.4{ }通配符 2.man指令3.cp指令4.mv指令5.alias指令6. echo指令7.cat指令8.more指令9.less指令10.head与tail指令11.在Linux中写代码 总结 …

DHCP中继负载均衡使用原理

DHCP常用四种报文 基于UDP67服务端, 68端口客户端 discover 广播 offer 单播 rquest 广播 ack 单播 DHCP 50%时间续租时request报文为单播报文 DHCP 87.5%时间请求重新绑定IP时request报文为广播报文 DHCP的另类配置方案: 负载均衡: ip re…

【Python_Pandas】reset_index() 函数解析

【Python_Pandas】reset_index函数解析 文章目录 【Python_Pandas】reset_index函数解析1. 介绍2. 示例2.1 参数drop2.2 参数inplace2.3 参数level2.4 参数col_level2.5 参数col_fill 参考 1. 介绍 pandas.DataFrame.reset_index reset_index(levelNone, dropFalse, inplaceF…

【AI大模型智慧办公】用《文心一言》1分钟写一篇博客简直yyds

文章目录 前言文心一言是什么文心一言可以做什么文心一言写博客申请体验写在最后 前言 当今社会,博客已成为了许多人分享观点、知识和经验的重要平台。用文心一言写博客是将自己的思考、想法和经验以文字的形式呈现出来,让更多人了解自己。通过写博客&a…

【Python入门】Python循环语句(while循环的基础语法)

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函…

【计网】第三章 数据链路层(4)局域网、以太网、无线局域网、VLAN

文章目录 3.6-1 局域网基本概念和体系结构一、局域网二、局域网基本概念和体系结构三、局域网传输介质四、局域网介质控制方法五、局域网分类六、IEEE 802 标准七、MAC 子层和 LLC 子层总结: 3.6-2 以太网一、以太网概述二、以太网提供无连接、不可靠的服务三、以太…

RabbitMQ启动失败

首先,你得先确认的你得Erlang的版本和RabbitMQ的版本是否能相互兼容,如果不能,请先下载对应的Erlang版本或者RabbitMQ版本。 1. 在Java中使用了RabbitMQ发现不停的尝试连接,却连不上的问题 先在cmd下输入erl,看一下E…

EXCEL比较麻烦零碎的日期数据的处理,数字转日期,日期转数字

1 有时候想输入日期,但会被EXCEL自动识别为数字 原因是 有的EXCEL版本会处理,有的则不会自动处理为日期。也可能,单元格因为各种原因被提前设置了格式,比如常规等。还有的原因是因为EXCEL从xml等其他文件里导入的日期时间等数据本…

大数据Doris(二十):Doris的Bitmap索引介绍

文章目录 Doris的Bitmap索引介绍 一、Bitmap位图索引原理 二、Bitmap位图索引语法 三、注意事项 Doris的Bitmap索引介绍 一、Bitmap位图索引原理 bitmap,位图,是一种数据结构,即bit的集合,每一个bit记录0或者1,代…