JavaWeb1-计算机是如何工作的?

news2024/11/20 13:29:56

目录

1.计算机的构成 

1.1.计算机二进制

1.2.冯诺依曼体系结构

1.2.1.CPU(加工厂)

1.2.2.存储器(仓库)

1.2.3.输⼊设备(原材料)

1.2.4.输出设备(产品)

PS:关于存储空间:硬盘 > 内存 >> CPU

PS:关于数据访问速度:CPU >> 内存 > 硬盘

2.硬件—CPU 是如何工作的?

2.1.CPU 定义和组成

2.2.算术和逻辑单元 ALU

2.2.1.算术单元

2.2.2.逻辑单元

2.2.3.寄存器(Register)和内存(RAM) 

2.3.控制单元 CU(Control Unit)  

3.软件

3.1.操作系统(Operating System)

3.2.进程

3.2.1.进程的本质

3.2.2.进程关联的重要概念

3.3.线程

3.3.1.线程优势

3.3.2.进程 VS 线程

3.3.3.线程是不是越多越好


1.计算机的构成 

现代的计算机,大多遵守冯诺依曼体系结构

冯诺依曼体系由冯诺依曼提出,因此冯诺依曼被称为计算机之父

冯·诺依曼(John von Neumann,1903年12⽉28⽇-1957年2⽉8⽇), 美籍匈牙利数学家、计算机科学家、物理学家,是20世纪最重要的数学家之⼀。冯·诺依曼是布达佩斯⼤学数学博⼠,是现代计算机、博弈论、核武器和⽣化武器等领域内的科学全才之⼀,被后⼈称为“现代计算机之父”、“博弈论之父”。

【图灵提供了理论知识,冯诺依曼提供了具体的理论实现。】

为什么说冯诺依曼是核武器和⽣化武器等领域的⼈才呢?因为它也参加了曼哈顿计划,也就是参与了造原⼦弹的制作。
故事:冯诺依曼坐⻋的时候遇到了普林斯顿⼤学的研究员,聊起了做这个话题,他们在做⼀个研究导弹轨迹的机器,但遇到了很多困难,冯诺依曼后⾯去参观并提供了著名的冯诺依曼体系,因为冯诺依曼体系结构是在普林斯顿⼤学研究并创建的,因此冯诺依曼体系结构也被称为普林斯顿结构

PS:普林斯顿⼤学最近 3 年世界排名第⼀的⼤学,数学专业世界第⼀,培养了两个美国总统,69 个诺⻉尔奖得主,爱因斯坦在普林斯顿任职。

1.1.计算机二进制

除了冯诺依曼体系结构,还有计算机的⼆进制也是冯诺依曼发明并提出的。

1.2.冯诺依曼体系结构

通常情况下,执行流程是把需要处理的数据从磁盘加载到内存,再把需要运算的数据拿到CPU处理,最后再写回磁盘。

但也不一定,是分场景程序的。

如:

  • MySQL最后数据是要落到磁盘上的。但在没有真正提交事务之前,数据都是运行在内存中的;只有提交之后才会写到磁盘;
  • 对于Idea程序,是将磁盘上的代码读取出来,在内存中操作,打印执行结果。操作完成后就结束了,不会将数据再写回到磁盘中。
  • 像数据库redis,memcached(纯内存型数据库,当数据库打开之后,所有的数据都在内存中执行,不会写到磁盘之中)

1.2.1.CPU(加工厂)

CPU 中央处理器:包含运算器控制器,进⾏算术运算和逻辑判断。还含有一个寄存器,可以存储一些经常使用的变量,内部又分为一级缓存,二级缓存和三级缓存。其容量非常非常小,速度非常快。

1.2.2.存储器(仓库)

分为外存内存,⽤于存储数据(使⽤⼆进制⽅式存储)。

内存、外存(硬盘、U盘、光盘、软盘...),之前写的代码都是在内存中。

内存 VS 外存对⽐:

  • 内存⼩,外存⼤。
  • 内存的制作⼯艺⾼因此⽐较贵,外存成本低。
  • 内存操作速度快(纳秒级别)、外存操作速度慢(微秒级别),⼀纳秒等于10^-9,⼀微秒等于10^-3,相差好⼏个数量级。
  • 内存重启之后数据丢失,外存数据会永久保存(除⾮⼈为删除)。

1.2.3.输⼊设备(原材料)

键盘、⿏标、摄像头、⻨克⻛...

1.2.4.输出设备(产品)

显示器、⾳响、打印机...

有些设备既是输⼊设备⼜是输出设备,⽐如触摸屏。⽹卡既是输⼊⼜是输出设备。

PS:关于存储空间:硬盘 > 内存 >> CPU

PS:关于数据访问速度:CPU >> 内存 > 硬盘

2.硬件—CPU 是如何工作的?

2.1.CPU 定义和组成

CPU 也称为微处理器,是计算机的⼼脏和/或⼤脑,它的主要⼯作是执⾏算术和逻辑运算并将指令编排在⼀起。

PS:设备之所以能够工作是因为它有驱动(硬件设备提供了开放的端口进行操作的方法)。

CPU 有两个主要组件:

  1. 算术和逻辑单元 ALU(Arithmetic & Logic Unit)
  2. 控制单元 CU(Control Unit)

2.2.算术和逻辑单元 ALU

ALU 是计算机中进⾏算数、逻辑运算的核⼼部件,是计算机的数学⼤脑。

算术和逻辑单元⼜分为:算术单元和逻辑单元。

2.2.1.算术单元

算数单元,负责计算机⾥的所有数字操作,⽐如四则运算、或 8 位(bits)的加法器(adder)。

要理解 8 bits 的加法器,需要了解⼀些前置知识:

①电子开关——机械继电器(Mechanical Ralay)

通过电⼦开关我们可以实现 1 位(bit) 的逻辑运算,实现如下:

②门电路

门电路可以实现 1 位(bit) 的基本逻辑运算,如下图所示:

 ③ 进制相加的特点

 ④ 半加器

通过前⾯的前置知识,就可以通过半加器实现两个 1 bit 数的相加了,如下图所示:

⑤ 全加器 

⽽通过半加器我们就可以实现全加器了,也就是进⾏ 3 1 bit 数的相加了,如下图所示:

并且我们也可以实现 8 bit 的加法器了,如下图所示:

能够实现加法器,也就能实现减法操作和乘法操作以及除法操作了。
  • 减法器就是加⼀个负数 +(-n)。
  • 乘法器就是 N 个数相加,⽐如 3*3=9 就是 3+3+3=9
  • 除法器是 N 个数相减,⽐如 24/8=3 就是 24-8-8-8=0 结果就是 3(3个8连减,最后为0)。

2.2.2.逻辑单元

逻辑单元主要⽤来进⾏逻辑操作,最基本的操作就是与、或、⾮操作,但不只是⼀位(bit)数的⽐较。

2.2.3.寄存器(Register)和内存(RAM) 

光有 ALU 还是远远不够的,还要为 ALU 提供存储的部件。

存储的前置知识是⻔锁,如下图所示,利⽤⻔锁可以实现 1 bit 的存储:

使⽤⻔锁就可以实现寄存器,如下图所示:

内存的构建要⽐这个复杂⼀点,但基本原理⼀致。如此构建的内存被称为 RAM(Random Access Memory),可以⽀持 O(1) 时间复杂度访问任意位置的数据,这也就是我们数组下标访问操作是 O(1) 的硬件⽀持。

2.3.控制单元 CU(Control Unit)  

现在有 ALU、存储了,但这还是不⾜以让我们的计算机⼯作起来,需要有⼀个部件来指挥 ALU 进⾏何种的运算,⽽这个部件就是控制单元(CU)。

指令按顺序存储在 RAM 中,控制器通过读取将指令,并通过算术逻辑单元进⾏执⾏。以上内容就是最基本的 CPU 运⾏的基础知识了。

3.软件

计算机除了硬件之外最重要的资源就是软件了,⽽系统中最⼤、最重要的“软件”就是操作系统了。

3.1.操作系统(Operating System)

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

操作系统:

  • Windows:家庭/工作常用的操作系统。优点:图形化的操作界面,所见即所得,上手简单,支持各个厂商,市场份额占比多;缺点:使用UI绘制运行,将用户的操作翻译成指令执行。消耗系统硬件内存资源,消耗性能。
  • Lunix:优点:高性能,开源免费;缺点:是直接敲命令,没有多余的UI绘制,操作上手较难,得会基本命令才能玩起来。
  • MacOS:优点:和Windows类似,也是图形化操作的界面,且其UI界面更加酷炫,上手效果更好。所有应用都必须通过官方审核之后才能安装,没有病毒和弹窗广告;缺点:主打高端,价格贵。只支持自家厂商开放,市场份额占比比较少。

PS:不要装360,其本身就是流氓软件;火绒安全,占用的系统资源较少,还可以进行模拟弱网环境,指定给某个应用相应的网速。

3.2.进程

进程(Process)是操作系统分配资源基本/最小单位,⼀个进程拥有的资源有⾃⼰的堆、栈、虚存空间(⻚表)、⽂件描述符等信息。 从编程的⻆度来理解进程,可以把它看作是⼀个类或⼀个 PCB (Process Control Block)进程控制块的结构体。

简单来说,将⼀个可执⾏⽂件(.exe文件)运⾏起来就是⼀个进程。 进程可以看作⼀个程序运⾏的“过程”,注意区分:程序(可执⾏⽂件)和进程:

  • 程序是⼀个静态的磁盘上的⼀个⽂件。

  • 进程将可执⾏⽂件加载到系统中,加载就是将信息放⼊内存中,分配⼀些资源,并且执⾏程序包含的所有指令。

3.2.1.进程的本质

进程本质就是⼀个 PCB(Process Control Block)结构体,类似于 Java 中的类,⽽这个 Java 中的类包含了:

  • PID:进程ID,进程的唯⼀身份标识。 并不是固定的,它是每次启动进程时动态分配的。重启前后的 PID 是不同的。
  • 进程状态包括:
  1. 新建状态
  2. 就绪状态
  3. 运⾏状态
  4. 阻塞状态
  5. 销毁状态
  • 优先级:决定进程的执⾏顺序。可以开发者自己指定。(若是操作系统级别的进程,优先执行的概率会越大;每秒钟被分配的资源也应该更多)
  • 记账信息:为了保证进程执⾏的相对公平。可以规避进程饿死的问题。(记录分配CPU的次数和执行间隔,作为CPU是否执行它的依据,而是否执行它是进程调度器(通过调度算法决定调用哪个进程)决定的,也就是说记账信息只是给调度器提供了参考信息而已)
  • 上下⽂:保存本次的执⾏状态,以便下次继续执⾏,整个过程就称之为⼀个上下⽂。
  • ⼀组内存:指定进程需要使⽤的资源。

3.2.2.进程关联的重要概念

时间片:每个进程得的 CPU 执⾏的时间叫做时间⽚。

内核态和用户态:内核态表示操作系统作为最底层的软件拥有最⾼的权限就叫做内核态,⽤户态指⽤户编写的程序。 程序执行往往是从用户态->内核态->用户态。

Java程序员不做进程开发,做线程开发。并发编程都是基于线程的。

3.3.线程

线程(Thread)是操作系统能够进⾏运算调度最小单位。它被包含在进程之中,是进程中的实际运作单位。(一个进程里至少要有一个线程)⼀条线程指的是进程中⼀个单⼀顺序的控制流,⼀个进程中可以并发多个线程,每条线程并⾏执⾏不同的任务。在 Unix System V 及 SunOS 中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程kernel thread),⽽把用户线程user thread)称为线程

⽐如:⼀家公司要去银⾏办理业务,既要进⾏财务转账,⼜要进⾏福利发放,还得进⾏缴社保。如果只有张三⼀个会计就会忙不过来,耗费的时间特别⻓。为了让业务更快的办理好,张三⼜找来两位同事李四、王五⼀起来帮助他,三个⼈分别负责⼀个事情,分别申请⼀个号码进⾏排队,⾃此就有了三个执⾏流共同完成任务,但本质上他们都是为了办理⼀家公司的业务。此时,我们就把这种情况称为多线程,将⼀个⼤任务分解成不同⼩任务,交给不同执⾏流就分别排队执⾏。其中李四、王五都是张三叫来的,所以张三⼀般被称为主线程(Main Thread)。

3.3.1.线程优势

线程的创建和消耗⽐进程成本低很多,效率更⾼,⽽且同⼀个进程中的多个线程是可以共享资源⽂件的,⽽进程和进程之间是不能共享资源的,因此这就是线程的诞⽣的意义。

  • 线程间可以共享的资源:
  1. 内存可以共享。
  2. 打开的⽂件可以共享。
  • 线程间不可共享的资源:
  1. 线程的上下⽂、状态、优先级、记账信息不共享。
  2. 每个线程有⼀个栈空间不共享。

线程可以理解为⼀个轻量级的“进程”。进程是操作系统资源分配的最⼩单位,线程是操作系统执行和调度(运行)的最⼩的单位。

3.3.2.进程 VS 线程

⼩胖吃鸡场景:

① 单进程单线程

② 多进程单线程

③ 单进程多线程

④ 多进程多线程

进程和线程的区别:

 区别1:从属关系不同  

从属关系不同:进程是正在运⾏程序的实例,进程中包含了线程,⽽线程中不能包含进程。

区别2:描述侧重点不同

描述侧重点不同:进程是操作系统分配资源的基本单位,⽽线程是操作系统调度的基本单位。

区别3:共享资源不同

共享资源不同:多个进程间不能共享资源,每个进程有⾃⼰的堆、栈、虚存空间(⻚表)、⽂件描述符等信息,⽽线程可以共享进程资源⽂件(堆和⽅法区)。

区别4:上下⽂切换速度不同

上下⽂切换速度不同:线程上下⽂切换速度很快(上下⽂切换指的是从⼀个线程切换到另⼀个线程),⽽进程的上下⽂切换的速度⽐较慢。

区别5:操纵者不同

操纵者不同:⼀般情况下进程的操纵者是操作系统,⽽线程的操纵者是编程⼈员。

3.3.3.线程是不是越多越好

同⼀时间可以运⾏线程的 CPU 是固定的,如果超过了最⼤值,其他的只能排队处理,这样就起不到多的作⽤了,并且线程的调度也需要消耗时间,会造成“狼多肉少”的情况,会造成恶意争抢和线程过度调度的问题,反而减低线程执行效率。因此并不是线程越多越好。

创建线程的合适数量和两个因素有关系:

  1. CPU 的数量,没有标准答案,根据实际的服务器的硬件配置和任务类型来定,通常比较合适的线程创建数量一般为CPU个数-1。现在JDK可以根据你的电脑情况来生成匹配的线程数。
  2. 任务的类型,计算密集型任务(费CPU资源),线程数量不宜太多,约等于 CPU 数量;如果是 IO 密集型任务(不费CPU资源,但是读写需要很长时间),可以适当地多创建线程。(原则上是线程数量越多越好)

 

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

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

相关文章

Jmeter 并发业务场景如何控制接口只执行一次

今天在做并发测试,执行后会发现登录接口执行多次,实际只需执行一次就可以。 刚开始用了网上推荐的仅一次控制器,但是发现仅一次控制器对线程组无效。 其实只要对元件熟悉,这个问题很简单,只需要用吞吐量控制器&#xf…

CDH数仓项目(四) —— 集群性能测试/资源管理/清理CDH集群

0 说明 本文基于《CDH数仓项目(一) —— CDH安装部署搭建详细流程》《CDH数仓项目(二) —— 用户行为数仓和业务数仓搭建》和《CDH数仓项目(三) —— Kerberos安全认证和Sentry权限管理》章节,本篇介绍些常见的性能测试和资源管理功能,及最后提供详细的…

SpringMVC之五种类型参数传递

目录 一:普通参数 二:POJO数据类型 三:嵌套POJO类型参数 四:数组类型参数 五:集合类型参数 知识点1:RequestParam 前面我们已经能够使用GET或POST来发送请求和数据,所携带的数据都是比较简…

深度学习中的attention机制

SE 文章 https://openaccess.thecvf.com/content_cvpr_2018/papers/Hu_Squeeze-and-Excitation_Networks_CVPR_2018_paper.pdfhttps://openaccess.thecvf.com/content_cvpr_2018/papers/Hu_Squeeze-and-Excitation_Networks_CVPR_2018_paper.pdf class SELayer(nn.Module):…

Java工具包类

java.util包有很多实用的类、接口和异常。 向量类,堆栈类,哈希表,枚举接口,日历类,随机函数类,映射接口和属性类。 Vector类 vector是异构的,可以存储不同的对象,同时可以动态增加…

【工具】国内苹果市场已上架 新一代社交产品 damus

国内苹果市场可下载 2月1日,Twitter 联合创始人 Jack Dorsey 发布推文表示,基于分布式社交媒体协议 Nostr 的社交产品 Damus 和 Amethyst 正式在苹果 App Store 和谷歌 Google Play Store 上线。 目前为止,Damus 在国内苹果应用市场是可以直…

远程超大功率森林防火喊话与应急广播系统方案

北京恒星科通发布于2023-2-2 一、引言 随着消灭宜林荒山和实现全面绿化,造林事业不断发展,林地面积、林业蓄积量逐年增加,如何加强森林防火、保护环境,是全国当前面临的一项重大任务。 森林火灾是一种突发性和破坏性极强的自然…

Spring Security(新版本)实现权限认证与授权

学习新版SpringSecurity详细配置一、Spring Security介绍1、Spring Security简介2、历史3、同款产品对比3.1、Spring Security3.2、 Shiro二、Spring Security实现权限1、SpringSecurity入门1.1 添加依赖1.2、启动项目测试2、用户认证2.1、用户认证核心组件2.2、用户认证2.2.1、…

CrossOver虚拟机软件2023最新版Mac运行切换Windows

CrossOver2023版是专为苹果电脑用户打造的一款实用工具,这款工具主要方便用户在mac上运行windows系列的应用程序,用户不需要安装虚拟机就可以实现各种应用程序的直接应用,并且可以实现无缝集成,实现跨平台的复制粘贴和文件互通等&…

我为什么抢不到票?!全国最难抢线路揭晓

随着疫情防控策略的转变,不少多年未归的朋友选择在今年返乡团聚。那么2023年春运抢票难度是否会因此而飙升?本期文章,我们通过数据分析,观察比较哪条线路的票最难抢,给还没有买到票的朋友提供参考。 根据往年央视报道和…

浅析晶体管放大电路的负载线

晶体管放大电路的负载线包括直流负载线和交流负载线,描述了输出端电压、电流与负载之间的关系。大学期间曾经学习过相关知识,本文将与大家重温所学内容,并介绍直流工作点对功率放大器性能的影响。 直流负载线 以场效应管为例,图…

基于python3实现Azure机器学习最接近人声的文本转语音功能

上期文章,我们介绍了如何使用Azure来创建一个语音服务API,哪里,我们得到了API的key,以及语音服务的基本信息,包含地区等,这些都是本期代码需要的参数 听了那么多AI合成的语音,Azure机器学习的文本转语音最接近人声https://blog.csdn.net/weixin_44782294/article/detai…

如何实现大文件上传:秒传、断点续传、分片上传

前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受&#…

在字节跳动干了5年的软件测试,2月无情被辞,想给划水的兄弟提个醒

前几天,一个认识了好几年在大厂工作做软件测试的朋友,年近30了,却被大厂以“人员优化”的名义无情被辞,据他说,有一个月散伙饭都吃了好几顿…… 在很多企业,都有KPI考核,然后在此基础上还会弄个…

Ubuntu设置静态IP

Ubuntu设置静态IP1.当前环境2. 设置前准备3.前提准备4.修改VMware中的网络配置5.修改Ubuntu配置文件6.查看网关信息7.Xshell远程连接1.当前环境 VMware16、Xshell7 2. 设置前准备 VMware16设置快照,配置出错可以返回到初始状态 3.前提准备 查看Ubuntu是否安装vi…

小程序项目学习--第七章:播放页布局-歌曲进度控制-歌词的展示

第七章:播放页布局-歌曲进度控制-歌词的展示 01_(了解)之前页面的回顾和播放页的介绍 功能介绍 02_(掌握)播放页-点击Item跳转到播放页和传入ID 功能概览 1.创建页面music-player 2.监听item的点击 方式一:直接写在子组件上 绑定监听点击 需要获取…

关于xxl-job中的慢sql引发的磁盘I/O飙升导致拖垮整个数据库服务

背景: 某天突然发现服务探测接口疯狂告警、同时数据库CPU消耗也告警,最后系统都无法访问; 查看服务端日志,发现大量的报错如下: CommunicationsException: Communications link failure :The last packet s…

dapr入门与本地托管模式尝试

1 简介 Dapr是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。Dapr支持的语言很多,包括C/Go/Java/JavaSc…

antv/x6 2.x 搭建流程图编辑页面(1)

进来闲来无事,看到x6 2.x版本也更新了有几个月了,便想着熟悉下2.x版本 一、首先搭建项目基础框架。 // yarn 方式 yarn create vitejs/app v3-ts --template vue-ts cd v3-ts yarn yarn dev// npm npm init vitejs/app v3-ts --template vue-ts cd v3…

人工神经网络BP神经网络结构及优化原理单隐层,多隐层及反向传播梯度下降释义

神经网络:人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征&#xff0c…