写点什么

Java 开发者值得深入思考的几个问题,建议收藏

用户头像
Geek_f90455
关注
发布于: 2021 年 08 月 02 日

二、解析


? 1. 硬件层的并发优化基础知识


? ?存储器的层次结构图如下:


???



? ?各级缓存耗时对比:


???



? ?采用分层缓存的层次结构会带来数据不一致问题,如下图:


???



? ?那么如何保证数据的一致性,现代 CPU 处理办法有两种:


? ?(1) 锁系统总线;


? (2) 利用缓存一致性协议 MESI(Intel 处理器用的比较多,还有很多其他的缓存一致性协议),大致结构如下图:


?



?2. CPU 的乱序执行


??CPU 中有个乱序执行的概念,概念图如下:



CPU 在执行指令的时候,往往不是顺序执行,但是会遵守 as-if-serial 原则,也就是最终一致性原则。CPU 为了提高指令执行效率,会在一条指令执行过程中(比如去内存读数据),去同时执行另一条指令,前提是这两条指令没有依赖关系。虽然指令执行顺序发生改变,但是不会影响单线程执行结果。多线程情况下为了不让 CUP 进行指令重排序,则需要用到 Volatile 关键字,因为 Volatile 的重要作用之一就是防止指令重排序。


?CPU 还会存在合并写的现象。当第一条指令往上级缓存写入数据时,由于上级缓存访问速度比较慢,可能第二条指令又对上一条指令的结果进行了修改,那么 CPU 将这两条指令合并的最终结果一次性的写入到缓存中,这就成为合并写。


?3. 如何保证不乱序执行


(1) 内存屏障:java 采用的是内存屏障,内存屏障其实就是一个 CPU 指令,在硬件层面上来说可以扥为两种:Load Barrier 和 Store Barrier 即读屏障和写屏障。主要有两个作用:


???a. 阻止屏障两侧的指令重排序;


???b. 强制把写缓冲区/高速缓存中的脏数据等写回主内存,让缓存中相应的数据失效。

Ending

Tip:由于文章篇幅有限制,下面还有 20 个关于 MySQL 的问题,我都复盘整理成一份 pdf 文档了,后面的内容我就把剩下的问题的目录展示给大家看一下,点击这里即可解锁全部内容!


如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对 MySQL 底层实现以及索引实现问的很多)




吃透后这份 pdf,你同样可以跟面试官侃侃而谈 MySQL。其实像阿里 p7 岗位的需求也没那么难(但也不简单),扎实的 Java 基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来 p7 岗差不多没什么问题,还是希望大家都能拿到高薪 offer 吧。

用户头像

Geek_f90455

关注

还未添加个人签名 2021.07.06 加入

还未添加个人简介

评论

发布
暂无评论
Java开发者值得深入思考的几个问题,建议收藏