JavaEE基础知识

news/2024/5/22 11:27:13/文章来源:https://blog.csdn.net/m0_60354608/article/details/126920963

文章目录

    • 前言
    • 计算机的基本组成
    • CPU
      • CPU运行程序的过程
      • CPU的构造
    • 操作系统
      • 操作系统功能
      • 常见的操作系统
      • 操作系统的具体组成
      • 操作系统的进程管理(重点)
      • 操作系统安排程序进程
      • PCB(进程管理块)
        • 进程调度
        • 关于进程的几个属性
      • 虚拟地址空间
    • 线程(thread [θred] )

前言

之前已经学过很多的知识,但是总会有一个疑惑,这些知识有什么用?

接下来的JavaEE的目标就是做出一个属于我们自己的网站

网站=前端+后端

简单来说,前端就是客户端,也就是浏览器运行的网页

后端就是服务器工作,也就是公司机房部署的程序

之后的学习将以后端技术栈为主,前端技术栈为辅进行学习

计算机的基本组成

image-20220811114422647

CPU

CPU运行程序的过程

image-20220811115434646

image-20220811115642486

image-20220811140257558

总的来说,执行程序过程:硬盘=>内存=>CPU=>解析指令=>执行指令

对于Java程序来说,由.java=>.class=>JVM读指令,解析指令,执行指令=>转换为CPU能认识的二进制指令

CPU的构造

基础的门电路是与门 或门 非门

构造出了更复杂的电路,进一步构造出了加法器

操作系统

操作系统是一种搞管理的软件

操作系统功能

  1. 对下: 管理各种硬件设备
  2. 对上: 给软件提供稳定的运行环境

常见的操作系统

PC端: Windows linux MacOS

移动端: Android(本质上是linux) IOS

操作系统的具体组成

image-20220813101651123

操作系统的进程管理(重点)

进程也叫做任务,一个跑起来的程序就被称为进程

.exe是可执行文件/可执行程序,它是存储在硬盘上的文件(静态的)

一旦双击,操作系统就会把这个文件的核心数据加载到内存中,同时在系统中生成一个"进程",可以在任务管理器上看到(ctrl + shift + esc)

只有双击可执行文件,才会产生进程,也就是说,要是单单只是一个可执行文件,就只是静态的,一旦运行起来,变成一个进程,执行程序里的指令,此时才是"动态的"

一个常见的误区:电脑上安装的程序太多了,电脑就会变卡

其实,硬盘上的可执行文件多了,只是占用硬盘空间,只要不双击运行,就不会占用内存空间,也不会占用CPU资源,根本不会影响到电脑, 至于电脑卡不卡,一般来说, 只有运行的程序多了,才会卡

还有一种情况,要是C盘快满了,会变卡 原因是很多的操作系统,在内存空间不够的时候,会使用一部分的硬盘空间,作为"交换分区",要是C盘(硬盘) 空间都不够了,就会影响到交换分区,就有可能会卡

操作系统安排程序进程

操作系统是如何管理的?

  1. 描述:详细的表示清楚一个进程有哪些属性/信息(PCB描述)
  2. 组织:通过一定的数据结构,把若干个用来描述的实体,放到一起进行增删改查

描述的时候,是通过结构体来描述的,结构体里面包含一个进程的各种信息,这个结构体就叫做PCB(进程控制块)

描述的时候,系统通常会使用双向链表来把这些PCB组织起来

创建一个进程,本质上是创建一个PCB,并且加入到双向链表中

销毁一个进程,本质上是从双向链表中删除对应的节点

查看任务管理器的进程列表,本质上是在遍历这个双向链表

一个进程可能是一个PCB(进程管理块),也可能对应多个PCB

系统管理PCB的时候,也不一定只有一个PCB,可能会有多个PCB

PCB(进程管理块)

进程里面有哪些关键的要素

一. pid 进程识别号 进程的身份标识

同一个主机,同一时刻,这些进程的pid是唯一的,可以通过pid来区分一个进程,但是进程终止的话,pid会被系统回收,可能会被继续分配给新运行的程序,所以pid是暂时唯一的

二.内存指针

要想创建进程,就要给进程分配内存空间,.有的用来存放数据.有的用来放指令,还有的用来维护运行状态… 内存指针就是确定那一块内存是放上什么的

三.文件描述符表

每个进程都会打开一些文件,文件描述符表就记录了当前进程打开了哪些文件

内存指针描述的是进程持有的内存资源

文件描述符表描述的是进程持有的文件资源

所以说进程是操作系统分配资源的基本单位

进程调度

当CPU资源有限,就需要合理安排

多核CPU就是每个CPU核心上,都可以独立运行一个进程

并行执行:多个CPU核心,都可以同时独立的运行多个进程

并发执行:一个CPU核心,先运行进程1 ,再运行进程2 ,再运行进程3,只要微观上切换的够快,宏观上看就像是3个进程同时运行

所以进程调度就是通过"并行" 和 “并发”,让计算机同时执行多个进程,现在主流的操作系统都是多任务的

关于进程的几个属性

一.进程状态

进程状态分为五种: 运行状态 就绪状态 阻塞状态 创建状态 结束状态

阻塞状态的进程,无法被调度到CPU上执行

就绪状态的进程,才能带CPU上执行

二.进程优先级

系统调度的时候,就会根据优先级,来给进程进行时间安排

三.进程上下文

进程在CPU运行一会之后,要切换到别的进程,此时就要保存当前运行的中间结果(存档),下次再轮到它执行的时候,就恢复之前的中间结果(读挡),继续往下执行

对于进程来说,上下文就是CPU的寄存器的值,寄存器的值包括了运行的中间结果,需要将这些结果保存到PCB的上下文信息中(内存中) 也就是(寄存器–>内存)

四,进程记账信息

统计每个进程在CPU上执行了多久,起到辅助调度的效果,避免了有些进程优先级低的进程完全执行不了

虚拟地址空间

进程1和进程2安排一下内存资源,一旦进程1出现内存访问越界,就会有可能影响到进程2,这是十分危险的

为了解决这个问题,就要让每个进程有各自的内存空间,不要让这些进程的活动范围重叠,这里给每个进程的内存空间就叫做"虚拟地址空间"(不是真实的物理内存地址)

会通过MMU(memory management unit )来完成虚拟地址到物理地址之间的映射

MMU映射的时候会进行检查,一旦有进程访问量更大的内存空间,MMU就会即使发现,避免了对物理内存产生影响

使用虚拟地址空间就可以使进程之间存在了"隔离性",这样子一个进程就不能直接访问另一个进程的内存数据, 一个进程出现bug,不会影响到别的进程 , 防止干扰的操作,提高了系统的稳定性

但是有些需求场景,需要多个进程相互配合,进程一旦隔离就很难交互,所以系统有引入了一个机制-------进程间通信

不管是哪种进程间通信,核心原则都是一样的 : 找一个多个进程都能访问到的公共资源,然后基于公共资源来交换数据

总结一下:

进程之间要求要有独立性(相互之间不影响) 通过MMU实现

进程如果需要进行配合通信,就需要使用特定的 进制间通信机制 (主要创是基于文件和基于socket(网卡))

创建进程的步骤:

  1. 创建PCB
  2. 给进程分配资源(内存/文件)资源,赋值到PCB中
  3. 把PCB插入到链表中

销毁进程的步骤

  1. 把PCB从链表上删除
  2. 把PCB上的资源释放
  3. 销毁PCB

创建和销毁进程最消耗资源的是第二步(对资源的分配),所以效率比较低

因此就出现了线程的概念(thread)

线程(thread [θred] )

线程是包含在进程中的,一个进程默认会有一个线程,也可以也有多个线程,每个线程都是一个"执行流" , 可以单独的在CPU上进行调度,同一个进程的这些线程共通过使用同一份系统资源(内存资源/文件资源)

线程可以被称为是"轻量化进程",

创建线程的开销比进程小,销毁线程的开销比销毁线程小(有效地解决了创建/销毁进程的第二步的问题)

image-20220814102258982

使用多线程的好处:

  1. 使用多线程能够充分利用CPU,能提高效率
  2. 创建第一个线程的时候,需要申请资源,后续再创建线程的时候,都是共用一份资源(节省了申请资源的开销)
  3. 销毁线程的时候,一直到销毁到最后一个线程的时候,才会真正释放资源,之前的线程销毁,不必真的释放资源(节省了释放资源的开销)

进程包含了线程,一个线程对应一个PCB,一个 进程对应一组PCB

在一组PCB上的内存指针和文件描述符表都是一样的(共用同一份资源)

而状态 上下文 优先级 记账信息则是每个PCB(每个线程)独有的

所以说进程是 资源分配 的基本单位 , 线程是 调度执行 的基本单位

进程与线程的区别(重中之重)

  1. 进程包含线程/ 线程是进程的一部分----明确关系
  2. 线程比进程更轻量,创建和销毁都更快-----快的特点
  3. 同一个进程的多线程之间共用同一份内存资源 文件资源,而进程之间是独立的内存/文件资源 ----解释为什么线程更快
  4. 进程是资源分配的基本单位 线程是调度执行的基本单位-----总结

举一个例子:

image-20220814110556355

image-20220814110608103

要是继续增加人数,效率就会更高,但是不是人越多越好,要是人超过一定的数量,反而会降低效率

对应到多线程上,线程数目也不是越多越好,CPU核心数是有限的,当线程达到一定成都的时候,CPU核心数已经被吃满了,此时再增加线程,也没法提升效率,反而会因为线程调度开销太大,降低效率

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

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

相关文章

企业薪资系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):

PostgreSQL - 基于pg_basebackup实现主从流复制

PostgreSQL - 基于pg_basebackup实现主从流复制1 数据库节点2 安装PostgreSQL2.1 创建postgres用户2.2 安装PostgreSQL3 配置主节点4 配置从节点5 验证主从同步1 数据库节点 节点ip节点角色192.168.163.133主节点192.168.163.134从节点 2 安装PostgreSQL 2.1 创建postgres用户…

计算机网络——数据链路层(滑动窗口协议: 选择重传)(点对点协议 PPP)

目录 滑动窗口协议: 选择重传 选择重传协议 选择重传协议 点对点协议 PPP PPP 的主要特点 PPP 协议有三个组成部分 PPP 协议的帧格式 PPP 有一个 2 个字节的协议字段 透明传输问题 PPP 的字符填充 PPP 的工作状态 滑动窗口协议: 选择重传 选择重传协议 GBN相对简单&a…

【周末闲谈】谈谈数学转码这一年来的体会与反思

——我们走了太远,以至于忘了为何出发 前言 笔者本科读的是数学专业,就是每天和数学分析、高等代数、概率论、随机过程等等这些理论打交道的专业,这个专业出来工作好像一般有两个方向就是金融和计算机,我选择了计算机方向。主要…

2022 第五届 浙江省大学生网络与信息安全竞赛技能赛 预赛 Writeup,5题

文章目录1、Web:nisc_easyweb2、Web:nisc_学校门户网站3、Web:吃豆人吃豆魂4、MISC:好怪哦5、RE:ManyCheck1、Web:nisc_easyweb 题目描述: 打开网站,是一个php的初始页面。 思路…

springboot+微信小程序的点餐系统(开题报告+论文+答辩PPT+源码)

技术架构 SprongBootMysql微信小程序 简介 本点餐小程序是使用Java/JavaScript编程语言开发的,存储数据方面则用到了MySQL数据库。顾客可以使用小程序扫码功能扫描餐厅桌角的二维码就座,也可以点击排号等位由后台工作人员安排就座;通过首页…

通关GO语言10 Context:你必须掌握的多线程并发控制神器

在上一节课中我留了一个作业,也就是让你自己练习使用 sync.Map,相信你已经做出来了。现在我为你讲解 sync.Map 的方法。 Store:存储一对 key-value 值。 Load:根据 key 获取对应的 value 值,并且可以判断 key 是否存在…

GO面试题集锦

GO面试题集锦 目录GO面试题集锦slice 扩容机制slice 为什么不是线程安全的map 底层原理map 扩容机制map 遍历为什么无序map 为什么不是线程安全的Map 如何查找Map 冲突解决方式Map 负载因子为什么是 6.5Map 和 Sync.Map 哪个性能好Channel 底层实现原理Channel 有什么特点Chann…

docker实战教程(七):镜像的分层概念

联合文件系统(UnionFS) 联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。联合文件系统是docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像…

Zookeeper简介

文章目录Zookeeper简介zookeeper能做什么zookeeper的数据模型zookeeper工作机制zookeeper集群的选举机制1、第一次启动选举机制2、非第一次启动选举机制搭建zookeeper的集群Zookeeper简介 zookeeper能做什么 master节点选举:主节点挂了以后,从节点就会…

基于 ANFIS 的非线性回归(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 👨‍🎓博主课外兴趣:中西方哲学,送予读者: 👨‍&a…

字符串函数以及内存函数的模拟实现(超详细,全面理解字符串函数!!!)

目录 一、strlen 1.参数指向的字符串必须要以 \0 结束。 2.注意strlen函数的返回值为size_t,是无符号的 3.模拟实现strlen 二、strcpy 1.源字符串中的 \0 拷贝到目标空间 2.源字符串必须以 \0 结束 3.目标空间必须足够大,以确保能存放源字符串 4…

@Conditional

条件装配:满足Conditional指定的条件,则进行组件注入 @Configuration//告诉springboot这是一个配置类 public class MyConfig {@Bean("tom")public Stu stu01(){return new Stu("汤姆");}@ConditionalOnBean(name="tom")//当容器中有tom组件时…

windows工具:推荐一款可以截长图(滚动截图)的工具FSCapture

windows工具:推荐一款可以截长图(滚动截图)的工具前言一、FSCapture是什么?二、使用方法1.下载地址和安装2.使用方法前言 有的时候你画的框架图太大,已经超过了一屏,想要导出图片,用普通窗口截…

汇编常用寄存器以及寻址方式

寄存器概览 常用寄存器 AX accumulator 累加寄存器 BX base 基址寄存器 CX count 计数寄存器 DX data 数据寄存器 SP stack pointer 堆栈寄存器 BP base pointer 基址指针寄存器 SI source index 源变址寄存器 DI destination index 目的变址寄存器 IP instruction pointer 指…

ch4 报错修正 Sophus使用

ch4 报错& 修正 (1) # 添加Eigen头文件 include_directories( "/usr/include/eigen3" )(2) #include "sophus/so3.hpp" #include "sophus/se3.hpp"(3) 大量报错但都…

定制qga(作业截图)

文章目录一、qga介绍二、证明qga命令可以正常使用三、创建qga安装包四、总步骤一、qga介绍 qemu guest agent简称qga, 是运行在虚拟机内部的一个守护程序(qemu-guest-agent.service), 他可以管理应用程序,执行宿主机发…

声呐直线阵正交混频实验(HEU信息与信号处理创新实践项目一)

写在前面 这个实验原要求是要实现 969696 通道的正交混频变换(后来老师说只要不是单通道都行),因此必须使用 FIRFIRFIR IP核(手搓FIR一两个通道还行,96通道就太费劲了),所以实验成功的关键就是…

BNU002期-学术沙龙-写好综述

文章目录综述的介绍什么是综述为什么要读综述为什么要写综述怎样写综述综述案例中的问题对于综述写作问题的分类如何避免综述写作问题讨论综述问题框架环节并完善做个升华:谈谈科研和读综述的乐趣本文引用资料的链接补充综述的介绍 本文围绕 什么是综述 我创设这…

微服务基础---认识微服务

1.1认识微服务 1.1.1微服务架构演变 单体架构 将业务的所有功能都集中在一个项目中进行开发,打成一个包部署. 优点:架构简单、部署成本低缺点:耦合度高 分布式架构 根据业务功能对系统进行拆分,每个业务模块作为独立项目开发&am…