[JavaEE]计算机是如何工作的

news2024/10/6 1:53:44

 


专栏简介: JavaEE从入门到进阶

题目来源: leetcode,牛客,剑指offer.

创作目标: 记录学习JavaEE学习历程

希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长.

学历代表过去,能力代表现在,学习能力代表未来! 


目录

1. javaEE概述

2. 计算机发展史

3. 冯诺依曼体系

4. 操作系统

4.1 操作系统的定位

4.2 什么是进程/任务

4.3 进程控制块抽象

4.4 进程控制块的属性

 4.4并行与并发的区别

4.5 进程调度

4.6 内存分配 --- 内存管理

4.7 进程间通信


 前言

由于JavaEE涉及许多计算机操作系统中多线程的知识 , 本文作为javaEE的第一篇文章 , 旨在了解多线程的基础知识 , 为后续JavaEE并发编程的学习打好基础.


1. javaEE概述

javaEE是基于javaSE基础构建的, 用来实现企业级和Web应用级企业的开发, 它不是编程语言而是一系列的技术规范和实现, 技术平台的核心思想是容器加组件.


2. 计算机发展史

计算机的需求在人类的历史中广泛存在, 发展大体经历了从一般计算机工具到机械计算机再到目前的电子计算机的发展历程.

人类对计算机的需求, 驱动我们不断的发明, 改善计算机.目前这个时代是"电子计算机"的时代, 发展的潮流是:更快速, 更稳定, 更微型,.


3. 冯诺依曼体系

现代计算机大多遵循冯诺依曼体系

  • 输入设备 : 用户给计算机发号施令的设备(键盘 , 鼠标 , 摄像头 , 麦克风)
  • 输出设备 : 计算机个用户汇报结果的数据(显示器 , 音响)
  • CPU 中央处理器 : 进行算数运算和逻辑判断
  • 存储器 : 分为内存和外存, 用于存储设备(二进制存储)

影响存储空间:

硬盘 > 内存 >>CPU

影响访问速度:

CPU > 内存 > 硬盘


4. 操作系统

操作系统是一组计算机资源管理的软件的统称 , 目前常见的操作系统有 : Windows系列 , Unix系列 , Linux系列 , Android系列(本质Linux) , iOS系列(与Mac同源) , 鸿蒙等等.

4.1 操作系统的定位

 操作系统有两个基本功能:

  • 防止硬键被时空的应用程序滥用
  • 向应用程序提供API来控制复杂而又通常大相径庭的低级设备.

4.2 什么是进程/任务

一个运行起来的程序 , 就可以称之为"进程" , 如果没运行起来就只能叫程序. 同时 , 在操作系统内部 , 进程又是操作系统进行资源分配的基本单位.


4.3 进程控制块抽象

进程是一个重要的软件资源 , 是由操作系统内核负责管理的.(描述+组织)

  • 描述:

使用结构体(c语言的结构体) 来描述进程属性 , 与java中的类具有相似的功能.

用来描述进程的结构体又被称为PCB(programe control block)进程控制块

  • 组织:

通过双向链表 , 把多个PCB串联到一起.(当然实际情况更加复杂 , 这里以开源的Linux操作系统为例)

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

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

查看任务管理器的进程列表 , 本质上就是遍历这个PCB链表 , 取出相关的资料.


4.4 进程控制块的属性

  • 1.pid 进程的身份标识符.(唯一的数字)

这些pid可以说是进程的身份证号 , 目的是区分进程. 

  • 2.内存指针 

指明了这个进程执行的代码在内存的什么位置 , 以及这个进程中执行的数据都在哪里.

  • 3.文件描述符表 

文件描述符表可以视为是一个数组 , 里面每一个元素又是一个结构体.每一个结构体对应一个文件的相关信息.进程每打开一个文件就会在文件描述符表上多增加一项.

假设我们的代码中不操作文件 , 只有一个打印"HelloWorld"的语句 , 还是需要文件描述符表~~

一个进程只要启动 , 不管是否有操作文件的代码 , 都会默认打开三个文件 , 标准输入(System.in) , 标准输出(System.out) , 标准错误(System.err).此时对应的文件描述符表 , 会创建三个表项 , 标准输入 , 标准输出 , 标准错误 , 对应下标分别是0 , 1 , 2.这个文件描述符表的下标被称为是文件描述符


 4.4并行与并发的区别

一个系统中进程有上百个 , 这些进程希望能够"同时运行""分时复用" , CPU虽然是多核但数量有限.由此引出并行与并发的概念.

  • 并行:

如果系统有多个CPU , 一个CPU执行一个线程 , 另一个CPU执行另一个线程 , 两个线程之间互不抢占CPU资源 , 我们称之为并行.

~~微观和宏观都是同时执行. 

  • 并发:

当有多个线程执行在运行时 , 如果系统只要一个线程 , 则它不可能同时运行一个以上的线程 , 它只能将CPU的运行状态划分成若干个时间段 , 再将线程分配给各个时间段运行 , 当一个线程运行时其他线程出于挂起状态 , 我们称之为并发.

~~微观串行 , 宏观并行. 

eg: 在一个CPU核心上 , 先运行一下QQ音乐 , 再运行一下TX视频....只要切换速度足够快 , 我的电脑主频是3.2GHz一秒可以执行32亿条指令(细品) , 宏观上人感知不到.

由于并行和并发是内核负责处理的 , 应用程序感知不到.因此往往也把并行和并发 , 统称为并发.

除非显示声明 , 否则谈到并发 , 就是指并行+并发.


4.5 进程调度

为了给这些进程更好的分配CPU资源 , 操作系统里面有一个重要的资源调度器 , 就负责让有限的CPU来调度执行这么多的线程.

进程调度的相关属性.

  • 进程的状态

就绪状态:随叫随到 , 进程随时准备好了去CPU上执行

运行状态:正在CPU上运行的

阻塞状态(睡眠状态):短时间无法到CPU上执行了 .eg:进程正在进行密集的IO操作 , 读写数据.

  • 进程的优先级

当有很多进程需要运行时 , CPU先给谁排 , 后给谁排 ,  给谁排多点 , 给谁排少点.

eg:(本段子纯属虚构)

小美排时间优先给小A排 , 周一周二周三都和小A逛街吃大餐可以获取物质上的实惠 , 周四周五给小B排 , 因为小B长的帅赏心悦目.周六分单双周给小C排 , 防止小C不舔了.

进程也是有优先级的~~

操作系统调度并不是一碗水端平的.

  • 上下文

操作系统在进行进程切换的时候 , 就需要把进程执行的"中间状态"记录下来保存好,下次这个进程再上CPU运行时 , 就可以恢复上次的运行状态 , 继续向下执行.

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

保存上下文 , 就是将这些寄存器的值保存到内存中去.

恢复上下文 , 就是把内存中这些寄存器的值恢复回去.

eg:

因为小美要同时和3个人谈恋爱 , 因此她必须记住上次和某个人进行都什么程度了 , 是否有啥未完成的任务之类的.

上一月

小A对小美说 , 下个月我带你去三亚玩 , 让小美提起准备准备~~

小B对小美说 , 下个月我爸过生日 , 想让小美帮忙准备准备~~

下一月

小A问小美:你准备好了吗?小美说:我给你爸买了一个剃须刀

小B问小美:你准备好了吗?小美说:我已经买了一套泳衣了.

很明显这时就穿帮了 , 为了解决这个问题 , 就需要记录好 , 上次约会都有哪些进展 , 方便下次执行.

  • 记账信息

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

eg:

小美和各个男友每相处一段时间 , 就做一个总结 , 统计一下每个人身上大概花费了多少精力.始终保持好一个合适的尺度 , 不能太远 也不能太近.让每一个人都感受到温暖.

PCB中包含的属性非常多 , 上述是主要属性~~


4.6 内存分配 --- 内存管理

内存指针所指向的并非是真实的物理地址 , 而是经过了一层抽象 , 虚拟出来的地址空间.类型与C语言学过的指针 , 这里的内存地址就是虚拟内存地址.

内存物理上是个内存条可以存储很多的数据 , 内存条可以想象成一个很长的走廊 , 走廊有很多的房间.走廊有很多的房间 , 每个房间的大小1Byte.每个房间还有个编号 , 从0开始依次累加.这个内存编号就是内存的"物理地址".

内存有个了不起的特性~随机访问.访问内存上的任意地址的数据 , 速度都极快且时间也差不多.因此造就了数组下标操作是O(1).

如果进程操作内存的物理地址就会出现如下图所示 , 如果进程1的代码出现bug就可能导致访问的内存越界 , 进程1的越界访问到进程2的内存.

eg:

当你写一个程序一运行 , 不一会QQ崩溃了 , chrome也崩溃了.....那么这锅谁背~~

 内存使用虚拟地址就可以有效解决该问题 , 操作系统的MMU一但发现进程1的访问超出了访问范围  , 此时会直接向进程反馈一个错误.(具体来说就是SIGN SEGEMENT FAULT 信号 , 引起进程的崩溃) , 这样就可以保证谁出bug谁奔溃 , 其他无关线程不受影响.增强进程间的隔离性.

主要目的就是解决进程间相互影响的问题.


4.7 进程间通信

虽然进程隔离了 , 但又引入了新的问题.有时候 , 确实进程之间 , 需要数据的交互.(相互配合)

在隔离性的基础上 , 开个口子 , 进程间通信实现方式很多 , 但核心思路是一致的.需要搞一个多个进程都能访问到"公共空间" , 基于这个公共空间来进行数据交互即可.

eg:

在当前疫情时代的背景下 , 点外卖提倡无接触配送 , 外卖小哥可以将外卖放到指点的地点就可以实现.

这里的通信方式/公共空间 , 有很多具体的体现.

JavaEE主要涉及两种方式 , 基于文件 , 基于网络.


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

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

相关文章

java面试强基(15)

说明一下public static void main(String args[])这段声明里每个关键字的作用? ​ public: main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。所以可见性设置为 pulic. ​ static: Java平台调用这个方法时不会创建这个类的一个实例&#xf…

如何将带GPS的网络化的软件定义无线电接收机应用于分布式和移动频谱监测?(二)

GPS定位和测向的四种技术 知道感兴趣信号的位置对于许多应用很重要。军事用户获得了更好的态势感知能力,诸如机场或公用事业基础设施之类的敏感设施可以找到RF干扰源,电信公司可以识别恶意发射机或其他干扰其覆盖范围的设备。通过嵌入式GPS功能了解测量…

中国什么时候能办世界杯?

自从1930年在乌拉圭举办了第一届世界杯以来,到现在已经成功举办了22届,然而这22届里,光是欧洲就举办了11届,南美洲5届,中北美洲3届,亚洲2届,非洲1届。 说到这里不难发现,他们之间分布…

Azure DevOps Server 用户组加入 Azure AD Domain Service 管理用户

一,引言 今天我们继续讲解 Azure DevOps Server 的内容,对于管理用户组除了在 Azure DevOps Server 服务器上添加管理员方式外,还有没有其他方式,Azure DevOps 需要加入Azure ADDS 服务域后,Azure DevOps Server 的管理…

[附源码]计算机毕业设计springboot基于vue+mysql开发的考试系统

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

图扑软件荣获第七届“创客中国”中小企业创新创业大赛优胜奖!

2022 年 11 月 17 日,由工业和信息化部、财政部共同主办的第七届“创客中国”中小企业创新创业大赛全国总决赛在浙江杭州落下帷幕。 本次《第七届“创客中国”中小企业创新创业大赛》举办目的,意在加大优质中小企业梯度培育力度,进一步提升中…

ProcessDB实时/时序数据库——ODBC之连接数据库

目录 前言 一、安装ProcessDB-ODBC驱动 1.下载ProcessDB-ODBC驱动 2.安装ProcessDB-ODBC驱动 二、配置ProcessDB数据源 三、JAVA连接ProcessDB数据库 前言 ProcessDB实时/时序数据库支持ODBC连接数据库,接下来将和大家分享下如何使用ODBC操作ProcessDB实时/时…

Java基础之《netty(5)—NIO之Selector》

一、基本介绍 1、Java的NIO,用非阻塞的IO方式,可以用一个线程,处理多个的客户端连接,就会使用到Selector(选择器)。 2、Selector能够检测多个注册的通道上是否有事件发生(注意:多个…

[附源码]SSM计算机毕业设计新闻发布和评论管理系统JAVA

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

【冰糖Python】Python 中的 assert 语句

assert 判断一个表达式的真假,在表达式条件为 false 的时候触发异常,返回错误 具体用法: assert expression assert expression [, arguments] 实际用例: 注意以上使用: 1、条件为True时,assert不执行…

基于PHP+MySQL高校教务选课系统的设计与实现

兴趣是最好的老师,只有学生选择了自己感兴趣的课程才能够更好的进行学习,目前有很多高校的选课中出现很多问题,如学生对开设的课程不了解,代选课程等等,这些问题多而繁杂,不容易解决。 本系统就是为了学生开放的在线选课系统,而网络选课系统是帮助学生了解到所学课程的内容,多自…

Android——使用ContentProvider共享数据

实验名称: 使用ContentProvider共享数据 实验目的: (1)能使用ContentProvider共享数据 (2)能使用内容观察者观察其他程序的数据变化 实验内容及原理&…

H2N-Hyp-FF-OH, 2493080-84-3

Hyp-Phe-Phe 是一种三肽,通过 Phe 环的芳香相互作用形成螺旋状的薄片,构成一个交叉螺旋结构。Hyp-Phe-Phe 具有很高的剪切压电特性,可作为一种压电材料。Hyp-Phe-Phe is a tripeptide that forms helical-like sheets via aromatic interacti…

Flowable定时器与实时流程图江南一点雨

1. 定时器 1.1. 流程定义定时激活 在之前松哥给小伙伴们介绍流程定义的时候,流程都是定义好之后立马就激活了,其实在流程定义的这个过程中,我们还可以设置一个激活时间,也就是流程定义好之后,并不会立马激活&#xf…

数据存储——存储视频

数据存储——存储视频视频的数字化一、视频采样二、视频量化总结:视频数字化的过程视频的数字化 1.视频是图像(帧)在时间上的表示 图象是离散的视频,视频是连续的图像 2.视频储存 每一帧图像或帧被转化为位模式并加以储存 一、视…

(3)点云数据处理学习——KD树近邻搜索

1、主要参考资料 (1)kd树原理 数组索引的kdtree建立及简明快速的k近邻搜索方法 (2)open3d 爆肝5万字 Open3D 点云数据处理基础(Python版))-技术圈 (3)视频参考 【PythonOpen3D处理点云数据…

12【MyBatis注解开发】

文章目录三、Mybatis注解开发3.1 快速入门3.1.1 常用注解说明3.1.2 注解实现开发3.2 注解实现一对一映射3.2.1 接口3.2.2 测试类3.3 注解实现一对多映射3.2.1 接口3.2.2 测试类三、Mybatis注解开发 3.1 快速入门 3.1.1 常用注解说明 注解功能Insert新增Update更新Delete删除…

创新指南|如何以STEPPS模型6招打造病毒式传播产品

从爆款产品到网络流行语,这种流行绝对不是依赖于运气,更不是神话。让人们喜欢读某些文章,让人们尝试某项新服务,甚至是投票竞选,这些事情的背后都有STEPPS模型的驱动,遵循或者仅仅应用STEPPS中的某几条&…

【毕业设计】21-基于单片机的智能恒温箱_温度报警装置设计(原理图+仿真+源代码+答辩论文+答辩PPT)

【毕业设计】21-基于单片机的智能恒温箱/温度报警装置设计(原理图仿真源代码答辩论文答辩PPT) 文章目录【毕业设计】21-基于单片机的智能恒温箱/温度报警装置设计(原理图仿真源代码答辩论文答辩PPT)任务书设计说明书摘要设计框架架…

Tomcat:servlet与servlet容器

前言 在介绍Tomcat之前,我们首先需要了解它的作用,简单的说,tomcat就是一个servlet容器。因此,本文首先从Web 应用程序开始讲起,逐步介绍servlet。 Web即表示网页的意思,它用于表示 Internet 主机上供外界访…