JavaEE初阶——初识EE(Java诞生背景,CPU详解)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能帮到你!

目录

零:Java的发展背景介绍

一:EE的概念

二:计算机的构成

1:CUP

(1)CPU的计算单元

(2)架构和指令集

(3)CPU的核心

①多核cpu和并发编程:

②超线程技术:

③大小核技术:

(4)CPU的频率

(5)CPU的指令

①寄存器的概念:

②模拟cpu执行指令的过程

③:总结CPU是如何计算的


零:Java的发展背景介绍

1:9几年,java之父詹姆斯想做一个面包机,当时流行的编程语言是c++,因为门槛比较高,团队里的新人上手慢,詹姆斯就简化了c++的代码,做出了java语言,后来面包机没搞成,java这一套编程语言却流传下来了

2:后来互联网兴起,人们从网页获取信息,网站开发成了热门 ,java就衍生出了一种技术applet,这是一种让java代码在浏览器上运行的技术,能够控制网页和用户之间的交互

3:同期微软的windows也崛起,当时主流浏览器是网景Netspace,windows的崛起让IE浏览器取代了网景,微软想让VBScript在IE上取代Java的前端开发位置,但是却成全了JAVAScript(跟java没啥关系,只是名字),JavaScript也一直为前端霸主之一流传到现在(现在微软下的TS市场份额超过了JavaScript),但是Java只好另寻出路

4:进军服务器后端开发领域 (当时后端是Linux的天下),当年后端开发网站服务器首选PHP(世界上最好的编程语言,官网上这么写的,叠甲!!),用到的技术栈是LAMP(Linux,Apache,MySQL,PHP),Java就参考PHP搞了一个JSP,Java凭借JSP就站稳了

微软则是仿照开发了一个叫ASP。

随着网站规模变大,PHP招架不住了,(PHP是把代码嵌入到html中),这种方式耦合性非常高,所以规模变大就出问题了
②JSP同样也是,这时Java中出现了Spring****(是一系列用于构建后端服务器的相关工具组件),把前端和后端解耦合了,即分开开发,这种方式把界面和逻辑分开,界面只由前端这些技术来构建,逻辑用其他语言来开发服务器,服务器只给界面提供数据,并不干预界面是什么样子的。
5:进军移动端应用开发 ,在00年,手机上的很多游戏都是Java开发的,用到的技术是**J2ME,**像贪吃蛇啥的,进游戏的界面会有个咖啡杯的logo

①:07年水果发布,12年安卓崛起,水果用的开发语言是Objective-C,生态非常封闭,相对安卓生态更加开放(是一个开源的操作系统),后来java就成了谷歌(安卓)力推的开发编程语言,

一:EE的概念

JavaEE就是java开发网站后端用到的一系列的技术栈

前端:通俗简单的讲就是我们现在在浏览器上看到的网页界面

后端:简单理解就是服务器,数据库等

学习的六个方面

1:操作系统基础

2:多线程

3:文件操作

4:网络编程

5:网络原理

6:jvm

二:计算机的构成

(1)计算机 = 软件 + 硬件

输入设备:鼠标,键盘,麦克风

输出设备:显示器,音响,耳机

既是输入也是输出:触摸屏,网卡

1:CUP

引入:CPU人类科技巅峰之作

(1)CPU的计算单元

cpu的计算单元非常的小,是通过光刻机在硅晶片上雕刻电路,想要提高cpu的算力,就得提高cpu计算单元的集成程度,就需要更高精度的光刻机,目前我国这一领域还是处于被卡脖子的一个阶段,且看诸君了!!

(2)架构和指令集

①cpu的设计方式有很多种,这就是架构 ,每种架构方式都有不同的**"指令集"**;

intel 和 AMD 搞的CPU是同一种架构------x86

高通、苹果搞得是另外一套架构------ARM(低功耗高续航,但性能略逊色于x86)

②指令集:我们说的编程,就是通过编程语言 写出来一些逻辑,这些逻辑最终被转换成cpu能够识别的**"指令"**(机器语言)最终执行。

③编程语言一般分为三种:机器语言,汇编语言,高级语言

④软件开发:我们所说的软件开发并不局限于图形化界面,而一个软件难易程度也跟图形化界面没有关系,软件开发说的是通过一些代码解决问题,如何写出一个软件就需要程序员具有相当高的内功和外功了

(3)CPU的核心

引入:上面说到,cpu的算力跟它的计算单元有关,计算单元越小,它的集成程度越高,算力越强,**那么这玩意可以无限小吗?**显然不行,涉及到量子力学了,原来的那一套逻辑就行不通了,那么没有办法了吗?no~no~no~

多核cpu和并发编程:

让一个cpu上具有多个"核心",每一个核心都是一个完整的cpu ,例如8核CPU:我们把要处理的一个大任务合理拆分成8个小任务,交给每一个核心去处理,此时大大提升了效率,这就是(并发编程)。当然仅靠核心是不足以完成这一任务的,还需要通过软件的配合

超线程技术

在cpu多核的基础上还能不能继续提升呢?可以的!在超线程技术的支持下,我们把一个"核心"当成两个来用,即如果是八核cpu,一个核心为两份劳动力,那我们就拥有了16份劳动力(一个核心干两个人的活)。(赤裸裸的剥削QwQ!!)

大小核技术

那还能提升吗?yes,后来intel搞出来个大小核技术,就是把一个核心分为两份(一份次大核心,一份次小核心),次大核心带有超线程技术(一个顶俩),次小核心不带超线程技术(一个顶一个)。

(4)CPU的频率

引入:由上提问,那是不是cpu的核心越多,算力就越强呢?不一定,cpu的算力还跟cpu的频率有关,频率是描述每秒钟cpu核心工作处理的次数,一般是按亿为单位的

①超睿频技术

cpu核心的频率是随当前任务的多少而动态变化的,即频率大小是有一个区间的,基础频率 (下限)------最大睿频(上限)

注:除此之外还有很多指标可以衡量cpu的性能

(5)CPU的指令

①寄存器的概念:

寄存器是CPU上的存储数据的单元,因为cpu自身能存储的数据不多,所以cpu计算的很多中间结果就可以先放到寄存器当中(随放随取) ,等要用的时候再拿出来,寄存器的读写速度非常快,比内存能高出3~5个数量级

解释:RAM内存,opcode操作码

②模拟cpu执行指令的过程

**步骤一:**假设从0号地址开始

数据四位一分 0010 1110(14)

0010(opcode)对应的指令是LOAD_A,从内存的指定地址加载到A寄存器当中

1110(14)地址对应的数据是0000 0011,也就是(放)A寄存器中:0000 0011

**步骤二:**光标下移到了地址1执行 同理(放)B寄存器中:0000 1110

**步骤三:**继续光标下移到了地址2 (计算两个制定寄存器中数据的和并放到第二个寄存器当中)

步骤四:

③:总结CPU是如何计算的

例如:上述步骤三 3 + 14 = 17;

第一步**:CPU从内存读取指令,并存放至寄存器当中**(读取指令非常耗时,比CPU执行计算开销大很多,因此CPU引入了缓存,流水线等技术来进行优化,下面会详细讲到)

第二步:CPU解析指令,需要用到指令表,不同的cpu架构有不同的指令表,指令表是写死到cpu中的,cpu很容易识别出来

第三步:CPU执行指令,执行过程中,指令可能会带有一些操作数,不同的操作数的额含义有所不同,

总结:指令,是内存当中的一段数据,我们写好的代码编译后,转化成cpu能够读懂的机器语言(指令),经过操作系统加载到内存当中,然后cpu从内存中读取数据才能执行

(我们把想法通过编程编译,转化成cpu能够识别的指令,操作系统把指令存储到内存,cpu读内存的指令到寄存器,cpu根据指令表解析寄存器中的指令,最后执行)

注:寄存器只是用来存放一些中间结果的一个地方,CPU只从内存当中读取数据和指令,读完之后根据指令表,CPU开始解析指令,最后执行指令

(简单理解:读、解析、执行)

(6)CPU的缓存和流水线

①背景引入:冯诺依曼体系

在当年,冯大佬提出的冯诺依曼体系的精髓就在于:将"执行"和"存储"分开,即"解耦合",这在计算机设计之初,大大降低了硬件的成本,当时cpu执行"指令"的速度,和从存储器(分为内存和外存)中读取指令的速度差不多。

但是随着时代的发展,硬件越来越NB,cpu执行的速度大大超过了从存储器中读取指令的速度,所以,就提出了一种"缓存"的机制来解决这个问题

②缓存

打个比方:(当年硬件还没发展起来的时候)有一个舞台,现在有5个演员依次 要从很远的地方来舞台演出(每个演员可能需要演多场戏),一个演员演出结束后,后一个演员出发去演出(此时舞台是空闲的,因为路上耽误很多时间,这就是从存储器中读取指令成本过高的原因),走了很久终于到舞台了,以此类推

第一个演员第一场演出完了之后,可不可以让他先住在宾馆不回去,因为后面他还要继续演出。从而出现了一个东西就叫作缓存

**缓存:就是将执行完毕的指令,先暂时放到缓存区中,一会还要用到的时候直接再取出来即可,速度快多了(即提升了cpu从存储器中读取指令的速度)**xian

③流水线:

前面说到,一个演员演出结束后,后一个演员才出发去演出,此时舞台是空闲的,就浪费了很多资源 ,那么我们能不能让A演员在演出的时候下一个B演员就提前出发呢?(即A演员演出结束后,B演员刚好到舞台,无缝衔接演出)这就是流水线!!!

相关推荐
架构文摘JGWZ42 分钟前
Java 23 的12 个新特性!!
java·开发语言·学习
拾光师2 小时前
spring获取当前request
java·后端·spring
aPurpleBerry2 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
我是苏苏2 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
xujinwei_gingko2 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring
2301_789985942 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习
IT学长编程2 小时前
计算机毕业设计 教师科研信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·毕业设计·springboot·毕业论文·计算机毕业设计选题·计算机毕业设计开题报告·教师科研管理系统
m0_571957582 小时前
Java | Leetcode Java题解之第406题根据身高重建队列
java·leetcode·题解
程序猿小D2 小时前
第二百三十五节 JPA教程 - JPA Lob列示例
java·数据库·windows·oracle·jdk·jpa
Zd083 小时前
14.其他流(下篇)
java·前端·数据库