首页
首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
高并发的暴力美学
架构染色
创建于2022-11-26
订阅专栏
健壮、稳定的高并发系统,其架构设计和构筑调优,离不开这里的点点滴滴。浮沙之上,勿筑高台。
等 34 人订阅
共16篇文章
创建于2022-11-26
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
ThreadLocal 使用手册 | 建议收藏
Java 中的`ThreadLocal`类允许程序员创建只能由创建它们的线程访问的变量。这对于创建线程安全代码很有用,因为它确保每个线程都有自己的变量副本并且不会干扰其他线程。
NIO-内存映射文件-理论篇
内存映射文件是一种允许程序直接从内存访问的特殊文件。通过将整个文件或者文件的一部分映射到内存中、操作系统负责获取页面请求和写入文件,应用程序就只需要处理内存数据,这样可以实现非常快速的 IO 操作。
遵循Happens-Before规则来保证可见性|而非掌握所有底层
基于JSR -133内存模型提出了happens-before的概念,通过这个概念来阐述操作之间的内存可见性。要保证可见性,就是遵守 Happens-Before 规则,合理的使用java提供的工具。
Java版管程:Synchronized
同步机制中有经典的管程方案,管程其实就是对共享变量以及其操作的封装: 1. 将共享资源封装起来,对外提供操作这些共享资源的方法。 2. 线程只能通过调用管程中的方法来间接地访问管程中的共享资源
避免重排序之使用 Volatile 关键字
volatile 关键字本身就包含了禁止指令重排序的语义,仅保证赋值过程的原子性,保障变量的可见性,但不具备排它性
运行期重排序:内存系统的重排序
CPU提供内存屏障指令,来解决内存系重排序。读屏障清空本地的invalidate queue保证之前的所有load都已经生效;写屏障清空本地的store buffer,使得之前的所有store操作生效
原来了解重排序是为了掌握可见性的保障
导致可见性的原因有很多 1. 为了提升性能而实施的编译期重排序。 2. 数据在寄存器中。 3. cpu缓存的更改未同步到主内存中 或 内存中的更改未同步到cpu缓存(运行期重排序)。
Redis cluster去中心化设计的思考与总结
分布式存储⼀般是通过多副本的形式保证数据可靠,多副本之间使⽤⼀致性协议保证数据一致,⾼并发场景下Leader单节点中心问题会成为系统瓶颈,解决办法是采用去中心化的设计如redis cluster模式
既生 synchronized 何生 JUC 的 显式 locks ?
新事物的出现要不是替代老事物,要么就是对老事物的补充 JUC 中所提供的显式 locks 就是对 synchronized 的补充
【自省】线程同步看腻了,尝尝 > 入门级的线程间协作?
当线程从wait()醒来后,要继续执行之前,一定要确认一下条件是否还满足,若不满足就再等,如此才是健壮的用法
【自省】你可思考过 AQS 中的同步队列为何这样设计?
本篇是学习 Doug Lea大师的论文《The java.util.concurrent Synchronizer Framework》,并结合AQS源码,记录下自己的一些思考,方便理解其设计与实现
分布式锁主动续期的入门级实现-自省 | 简约而不简单
如果某个客户端获得锁之后处理时间超过最大约定时间,或者持锁期间内发生了故障导致无法主动释放锁,其持有的锁也能够被其他机制正确释放,并保证后续其它客户端也能加锁,整个处理流程继续正常执行。
【自省】使用Executors.xxx违反阿里Java代码规范,那还不写定时任务了?
scheduleAtFixedRate`的逻辑结论是:如果上一个任务的执行时间大于等待时间,任务结束后,下一个任务马上执行。如果上一个任务的执行时间小于等待时间,任务结束。
【自省】线程池里的定时任务跑的可欢了,可咋停掉特定的任务?
线程池定时任务可取消,但使用需注意 1. 任务中未捕获的异常能导致后续执行不再执行。 2. 任务中未捕获的异常不会外抛,外部感知不到。 3. 任务中的异常,需在任务逻辑内捕获并记录,否则无处可知。
【自省】Thread的理论很简单吧,实战中什么情况要用setDaemon、 interrupt 和 join ?
当线程正在执行wait()、sleep()、join()方法时线程是处于【waitting】状态,内部仍会不断地检查中断状态的值,interrupt方法会改变目标线程的中断状态
并发之道:三大并发问题与JMM何干?
并发场景要解决好原子性、可见性、重排序问题。JAVA很友好,站在开发者的立场考虑问题,通过JMM保证内存一致性,并屏蔽了复杂多样又难以理解的底层技术知识,让开发者只关注如何正确高效的通过编码规避问题。