并发编程所需的底层基础

一、计算机运行的底层原理

1.多级层次的存储结构

①:辅存

固态盘不是主要的应用对象,因为固态盘的使用次数是有限的,无法支撑高并发场景

磁盘存储的最基本原理是电生磁。 磁盘的磁道里边有很多的磁颗粒,磁颗粒上边有一层薄膜为了防止磁点氧化,很薄,手一碰就会消失。

从下图当中我们可以看到如何在磁颗粒上边写入数据

我们的磁头上边有一个线圈,我们可以通过调整线圈的电流方向来控制磁头的磁极,那么在磁头上边的磁颗粒就是出现和磁头相反的磁性。假设我们用磁极N级代表数字1,磁极S级代表数字0,这样我们每个磁颗粒都存储这相应的数据。每个磁颗粒都存储着一个数据,我们将这个磁颗粒存储的数据叫做1 比特

磁头在磁道上运转会切割磁感线,由于磁点有N极和S极。所以会产生两种方向相反的电压,所以需要我们的磁头也需要带有一定的电压。(举例):假如正电压产生的是2V,负电压也产生2V,我们默认让磁头拥有3V的电压,当他滑到正的时候就有5V电压,当他滑动到负的时候就只有1V的电压
磁头在切割磁感线的时候必然会产生电压,但是不是所有的数据都是我们想要的如何得到我们想要的数据呢?

数据的传输必然是一个闭合的电路。我们只需要在数据传输线路上加一个数据拦截器,当传到不合法的电压的时候会出现断路,如果出现合法的电压的时候回形成闭合电路。

cpu要想读取磁盘当中的某些数据,就必须先将地址发送给磁盘。默认数据拦截器内的电路是断开的状态,数据电压要想通过就必须和地址电压共同作用将数据拦截器内的半导体变为导体。

磁盘的访问速度

我们在磁盘上找数据的时候,首先涉及到机械臂的移动,以及盘面的转动 共需要 5ms

上边我们看到cpu的的计算速度和每次只能计算的量,那么我们可以看到我们磁盘和cpu的速度差是25000000倍

那如何解决这个问题呢?------内存

②:内存

内存最小单位是一些类似于二极管这样的东西,它能存储一个电状态,高或低,可表示1或0;

内存在断电之后数据就会消失原因就是因为我们的内存条用的是电容存储的电荷

我们知道电容和电池一样,充满电的电池我们用0来代表,没有电的我们用1来代表。

内存的存取速度在20ns左右,如何由内存给我们的cpu提供数据,那么cpu的效率基本上能达到1%

③:高速缓冲存储器Catch

程序访问的局部性原理

即在一段时间内,整个程序的执行仅限于程序中的某一部分;相应地,执行所访问的存储空间也局限于某个内存区域;
空间局部性

就是最近的未来有可能要用到的信息,很有可能是在现在我们正在使用的这一个信息的存储空间周围的那些数据。例如:数组、指令和数据在内存当中的存储。
时间局部性

时间局部性指的是在最近的未来要使用到的信息,很有可能是现在我们正在使用的信息。例如:循环结构的指令代码。
存储系统存在的问题

在上边我们提到过内存给CPU供给数据的速度达到1%,这显然是不够的,那么综合以上出现的问题,我们巨大增加增加"Catche-主存"层次。

Catch为什么快
1.距离不同

catch在cpu内部,和cpu之间有专线连通。内存在cpu外部,和cpu通过公共总线来传输信号。

2.硬件设计不同

内存使用栅极电容存储信息,数据读取的时候属于破坏性读取

Catch使用双稳态触发器存储信息,电路设计更加复杂,数据读取效率更高

cpu是如如何访问catch的

方式一:先访问Cache未命中在访问主存

方式二:cpu同时去cache和主存当中找数据

④: 寄存器

寄存器是计算机中存储容量最小的存储器件,通常被集成在处理器芯片中。寄存器通常被用于存储处理器需要快速访问的数据,如程序计数器、指令寄存器、状态寄存器、通用寄存器等。cpu在计算过程中

2.多核CPU

①:单核处理器处理数据

早期的cpu只有一个逻辑运算单元(内核),我们知道计算机核心其实就是对数据进行运算,那么一个逻辑运算元也就是说在同一时刻,只能去运算同一指令。比如有一个for循环。运算 i++的同时不能和i<100000进行比较。

java 复制代码
for(int i =0;i<100000;i++){
    count ++;
}

进而我们可以推算出,有两个for循环,在单个逻辑运算单元的前提下,只能去运算一个,另一个只能等待。

java 复制代码
for(int i =0;i<100000;i++){
    count ++;
}
for(int j =0;i<100000;j++){
    temp ++; //这个地方不是count++是有用的,不是随便写的
}


操作系统会给两个程序分别设定一定时间,让任务1和任务2交替执行,一个任务执行一定的时间,当这段时间运行完了,就切换另一个任务,这样从结果来看,我们基本可以认定为同时执行。

对于单核cpu来说的话两个任务正在根据时钟周期在进行快速的切换。不管这两个线程的指令有少个,内核同时只能运行一个程序。
那我们能不能同时执行多个程序呢?

②:多核处理器处理数据

多核处理器是指一个处理器芯片上同时集成多个独立的处理器内核,每个内核都可以独立的执行指令。这意味着在一个多核处理器上同时执行多个线程,从而提高计算机的性能。

二、操作系统需要了解的知识

操作系统的发展历史

①:手工阶段

手工操作特点:用户独占全机,CPU等待手工操作。20世纪50年代后期,出现人机矛盾(手工操作的慢速度和计算机的高速度之间形成了尖锐矛盾),随之出现了批处理系统。

java 复制代码
主要矛盾:
1.每一个用户将自己的程序输出到计算机,直到计算机输出,在这个过程当中一个用户独占整个计算机。
2.用户需要将程序打成纸带,这个过程十分缓慢、而处理机处理数据非常慢,人机速度矛盾导致资源利用率低。

②:批处理阶段---单道批处理系统

加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(这作业包括程序、数据和命令)。
主要矛盾: 内存中只能有一道程序运行,只有该程序运行完成之后才能调用下一个程序。CPU大量的时间是在空闲等待I/O完成。资源利用率低。

③:批处理阶段---多道批处理系统

多道批处理系统:外存中的多个作业组成一个后备队列,系统按一定的调度原则每次从后备作业队列中选取一个或多个作业进入内存运行,在系统中形成一个自动转接的、连续的作业流。但是,在系统运行过程中,不允许用户与其作业发生交互作用(作业一旦进入系统,用户就不能直接干预其作业的运行)。

多道程序系统的出现,标志着操作系统渐趋成熟的阶段,先后出现了作业调度管理、处理机管理、存储器管理、外部设备管理、文件系统管理等功能。随之,分时系统出现,它既能保证计算机效率,又能方便用户使用计算机。

主要优点: 多道程序并发执行,共享计算机资源。资源利用率大幅度提升。CPU和其他计算机资源保持"忙碌"状态,系统吞吐量增大。
主要矛盾: 用户响应时间长,没有人机交互功能(用户提交自己的作业只能等待计算机处理完成,中间不能控制自己的作业执行)。

④:分时操作系统

多用户分时系统是当今计算机操作系统中最普遍使用的一类操作系统。把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待下一轮时再继续其运行。

分时操作系统:计算机 以时间片为单位轮流为各个用户/作业服务, 各个用户可以通过终端与计算机进行交互。
主要优点: 用户请求可以被及时响应,为了解决人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作互相独立,感觉不到别人的存在。
主要缺点: 不能优先处理一些紧急任务、操作系统对各个用户/作业都是完全公平的,循环的为每个用户/作业服务一个时间片,不区分任务的紧急性。

⑤:实时操作系统

系统能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理。实时系统两大特点:a.及时响应。每一个信息接收、分析处理和发送的过程必须在严格的时间限制内完成。b.高可靠性。需采取冗余措施,双机系统前后台工作,也包括必要的保密措施等。

主要优点:能够响应一些紧急任务,某些紧急任务不需要排队等待。

在实时操作系统的控制下,计算机系统接收到外部信号后能及时进行处理,并且在严格要求的实现内处理完事件。实时操作系统的主要特点是及时性和可靠性。

相关推荐
monkey_meng几秒前
【Rust中的迭代器】
开发语言·后端·rust
余衫马3 分钟前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng7 分钟前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
七星静香8 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员9 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU9 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie612 分钟前
在IDEA中使用Git
java·git
Elaine20239127 分钟前
06 网络编程基础
java·网络
G丶AEOM29 分钟前
分布式——BASE理论
java·分布式·八股
落落鱼201330 分钟前
tp接口 入口文件 500 错误原因
java·开发语言