- 博客(6)
- 收藏
- 关注
原创 Kafka
broker 一个kafka实例是个broker partition 一个topic下可以有多个分区,一个分区只能对于一个主题,一个patition相当于一个文件,kafka可以保证分区有序。 一个分区最多只能被一个消费组中的一个消费者消费,为了避免悲观锁导致吞吐量下降。这样没有锁竞争,充分发挥了横向的扩展性,吞吐量极高。这也就形成了分布式消费的概念。 一个分区可以有多个副本,生产者只与leader副本交互,follower副本从leader副本拉消息。 副本的集合成为AR,与leader保持一定同步的.
2020-12-25 14:05:08
51
原创 synchronized
synchronized 实现 对象模型总结: 每一个Java类,在被JVM加载的时候,JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类。当我们在Java代码中,使用new创建一个对象的时候,JVM会创建一个instanceOopDesc对象,这个对象中包含了两部分信息,对象头以及元数据。对象头中有一些运行时数据,其中就包括和多线程相关的锁的信息。元数据其实维护的是指针,指向的是对象所属的类的instanceKlass 每一个Java类,在被JVM加载的时候
2020-11-22 23:47:13
107
1
原创 AQS独占锁的释放
Example: ReentrantLock的锁释放 由于锁的释放操作对于公平锁和非公平锁都是一样的, 所以, unlock的逻辑并没有放在 FairSync 或 NonfairSync 里面, 而是直接定义在 ReentrantLock类中: public void unlock() { sync.release(1); } release release方法定义在AQS类中,描述了释放锁的流程 public final boolean release(int arg)
2020-11-22 18:26:21
312
原创 AQS源码 独占锁的获取
内部变量 int state状态 双向链表队列。 Node tail, Node head 持有锁的线程 Thread exclusiveOwnerThrea /** * Head of the wait queue, lazily initialized. Except for * initialization, it is modified only via method setHead. Note: * If head exists, its waitStat
2020-11-22 16:56:38
126
原创 future task 分析
future task 分析 类 实现RunnableFuture 接口, RunnableFuture继承 Runnable 和 Future 状态 0:NEW 初始状态 1:COMPLETING 任务已经执行完(正常或者异常),准备赋值结果 2 :NORMAL 任务已经正常执行完,并已将任务返回值赋值到结果 3: EXCEPTIONAL 任务执行失败,并将异常赋值到结果 4 :CANCELLED 取消 5:INTERRUPTING 准备尝试中断执行任务的线程 6:INTERRUPTED 对执行任务的线程
2020-11-05 18:45:31
119
原创 volatile
从上面我们可以看出,缓存一致协议很好的保证了多处理器间缓存一致性的问题。这样看来,我们并没有使用 volatile 关键字的必要,硬件层本身实现了多处理器间的缓存一致性并且对其上层是透明的。但事实并非如此,处理器除缓存外,计算单元与缓存系统间还隔着本地寄存器和缓冲区,处理器本身完成了计算但并没有及时将新值刷新到缓存的话,缓存一致协议并不会起作用,数据的新值对其它处理器的可见性依然无法得到保证。 ...
2020-10-01 16:52:29
64
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人