2024年大数据最全1(2),深入理解大数据开发

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

文件:比如硬盘上存储的数据,往往就是以文件为单位进行整理的。进程每次打开一个文件,就会产生一个“文件标识符”(标识了这个被打开的文件)。一个进程可能会打开很多文件,对应了一组文件描述符。

把这些文件描述符放到一个顺序表这样的结构里,就构成了文件描述符表。 使用了哪些硬盘上的资源

我们可以得出结论:进程的运行需要从操作系统这里申请资源

进程是操作系统进行资源分配的基本单位。(重要概念!!记住!!)

此处涉及的资源包括不限于内存、硬盘、CPU等

4.接下来这一组属性,都是描述和CPU资源相关的属性,这些属性都是辅助进行,进程调度

我们的程序能运行全依仗CPU

每个程序相当于一组“二进制指令”的集合。

买电脑时,遇到8核心16线程的电脑,是什么意思呢?

CPU中有8个核心,相当于有8个干活的人。但是每个核心,能干两个人的活,8个人可以同时干16个人的活。

以我的电脑为例子,就是这8个人要同时干115(109+6)个活。

2.并行、并发

并行:同一时刻,两个核心同时执行两个进程,此时这两个进程就是并行执行的

并发:一个核心,先执行进程1,执行一会儿之后,再去执行进程2,再执行一会儿之后,再去执行进程3,此时只要这里的切换速度足够快,看起来,进程1 2 3就是“同时”执行的。这就是并发。

举我的电脑为例子,虽然我们只有8个核心,也可以同时执行115个任务,这是通过并发+并行的方式来完成的。

这个过程完全是操作系统自身控制的,程序员是感知不到的。所以很多时候,就把并行+并发统称为并发。

并发程度更高的话,就可以成为高并发。比如一个核心(主体)并发的执行1w个任务就可以成为高并发。不过,这是没有具体的数据限度的。

举个简单的例子,我很喜欢猫猫。

猫猫1

猫猫2

猫猫3

这三只猫猫看见我跟别的小猫咪玩,就会很难过。我最喜欢猫猫2,所以多陪它一天,一三五都陪猫猫2。猫猫3脾气很大,要多花点时间哄,陪它两天吧,就是二四陪它。周六就跟猫猫1那只呆猫猫一起玩。周日休息。

站在每一天的维度,此时,我是在陪同一只猫猫玩。

站在一个月/半年的维度里,我是陪三只猫猫一起玩~

调度的足够快,才能看起来是“同时”。

这就是并发。

如果并行的话,就是这三只猫猫碰面了,那就是修罗场了。😭

3、进程调度

a)进程状态

简单认为,进程状态主要是两个:

就绪态:该进程已经准备好,随时可以上cpu执行

阻塞态:该进程暂时无法上cpu执行

就比如猫猫2去猫咖打工一周给我赚钱花,那这一周猫猫2就相当于阻塞状态。我可以安排猫猫1和猫猫3陪我玩~猫猫1和猫猫3就是就绪状态。

b)进程的优先级

进程之间的调度不一定是“公平”,有的要优先调度。就比如猫猫2优先级最高,猫猫3其次,猫猫1最低。

c)进程的上下文

✨上下文,就是描述了当前进程执行到哪里这样的“存档记录”。进程在离开CPU的时候,就要把当前运行的中间结果。“存档”等到下次进程回来CPU上,再恢复之前的“存档”,从上次的结果继续完后执行。

如果进程结束,就不必存档了。如果是暂时离开,就必须存档。

具体到进程,所谓的上下文具体指就是进程运行过程中,CPU内部的一系列寄存器的值。

寄存器很多种,其中最典型的作用就是保存当前进程执行的中间结果,包括进程运行到哪一条指令。

进程离开CPU,就必须把这些寄存器的值保存到PCB的上下文字段中。(存档)

进程下次回来CPU,再把PCB中的值给恢复到寄存器中。(读档)

CPU上有哪些寄存器,这些寄存器的含义不需要过多考虑。

d)进程的记账信息

统计了每个进程,在CPU上执行了多久了,可以作为调度的参考依据。

比如,猫猫1觉得我陪它的时间少了,心里不开心,感情淡了。我发现以后,肯定要暂时多给猫猫1排点时间,巩固感情。

猫猫1

进程的调度,并发并行都是非常关键的属性。

操作系统往往使用 双向链表 这样的结构来组织pcb

1.创建一个进程,就是创建一个链表的节点

2.销毁一个进程,就是把链表的节点给删除了

3.遍历进程列表,也就是在遍历链表

4、内存分配——内存管理(Memory Manage)

操作系统给内存资源的分配,采用的是空间模式。不同进程使用内存中的不同区域,互相之间不会干扰。

操作系统给进程分配的内存是以“虚拟地址空间”的方式进行分配的。每个进程访问的内存地址,都不是真实的物理内存的地址。

简单介绍虚拟地址空间:

这个图,就是每个进程都直接访问物理内存的地址。此时如果进程1,代码bug(比如数组下标越界、野指针),可能进程2的内存里的内存也被搞坏了。

这就对操作系统的“稳定性”产生了巨大的挑战。

站在这两个进程的角度看,他们的代码中操作的内存地址就是0x00-0xff这一段。这里访问的内存就会被操作系统自动映射到真实的物理内存上,但是进程自身感知不到实际的物理地址是啥。这时,遇到野指针就没事了。任何一个内存操作,都通过页表来翻译一下。如果遇到野指针,0x2ff,拿着这个地址,发现页表上就没有这个地址,无法翻译,也就无法真正的修改物理内存,也就不会对别的进程的内存数据造成干扰。

一个进程无法直接干预另一个进程的内存内容,“进程的独立性”,“每一个进程有自己独立的地址内容”,大大提升了操作系统的“稳定性”。

5、进程间通信(Inter Process Communication)

有时候,需要进程之间进行交互,互相配合。如果每一个进程直接访问物理内存,其实是没有隔离性,也就不需要进程通信,进程1直接把算好的结果,写到进程2的内存就行,那跟入室抢劫,没啥区别。

所谓进程间通信,就是在隔离性的前提霞,找一个公共的区域,让两个进程借助这个区域来完成数据交换。就是在隔离的前提下,做了一个小小的妥协~

操作系统提供的进程间通信具体实现方式比较多,有很多种:管道、消息队列、共享内存、信号……

在Java圈子里,主要使用文件,socket这两种方式来完成进程通信。

6、线程

进程,是比较“重量的”,速度慢、消耗资源多。

创建一个进程,成本比较高。销毁一个进程,成本也比较高。调度一个进程,成本也比较高,多进程编程可以解决并发编程的问题,但不是一个高效的选择。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

Nyo-1715584592785)]
[外链图片转存中…(img-NnqmfJLH-1715584592785)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值