- 博客(10)
- 收藏
- 关注
原创 AQS源码分析
基于 AQS 来实现一个同步器,只需对 AQS 中指定的方法进行重写,在方法内完成对同步状态 state 的控制。而对于等待线程的阻塞、唤醒等操作,AQS内部基于等待队列已经进行了实现。// 尝试获取排他锁,返回成功或失败// 尝试释放排他锁,返回成功或失败// 尝试获取共享锁,返回值代表剩余资源数量,负值表示获取失败// 尝试释放共享锁,返回成功或失败// 判定当前线程获得的资源是否是排他资源。
2024-09-24 21:48:50 971 1
原创 Kafka之Sender&NetworkClient
这篇文章主要介绍 Kafka 中的 Sender 和 NetworkClient。当生产者发送消息时,RecordAccumulator 对消息进行缓存分组,而 Sender 线程则会对 RecordAccumulator 中缓存的消息进行发送。Sender 线程内部首先会对消息进行发送前的准备,随后通过调用 NetowrkClient 进行网络操作。NetworkClient 负责发送消息请求并对收到的消息响应进行处理。
2024-09-04 22:17:49 444
原创 Kafka之RecordAccumulator
这篇文章将主要介绍 Kafka 生产者中的 RecordAccumulator。RecordAccumlator 负责对生产者将要发送的消息进行分组缓存,其内部对每个 topic 维持了一个 TopicInfo 来存储缓存的消息,TopicInfo 内部对该 topic 的每个 partition 维持了一个队列,消息被聚合成 ProducerBatch 存储在队列中。sender 线程每次对队列中聚合的 ProducerBatch 进行发送,从而减少网络传输的资源消耗,提升性能。
2024-08-22 20:59:44 920
原创 Kafka元数据
这篇文章将主要介绍 Kafka 中的元数据和生产者拉取元数据的过程。生产者在发送消息时,需要获取消息所属的 Topic 在 Broker 节点上的分布情况,然后将消息发送到对应的节点,因此,在生产者发送消息时,需要有当前 Topic 的元数据信息。本篇文章在 Kafka 生产者拉取元数据代码的基础上,对元数据内部的数据结构和生产者拉取元数据的过程进行介绍,并且对生产者拉取元数据的代码增加了注释来方便理解。
2024-07-21 20:59:13 903
原创 Kafka生产者
这篇文章将主要介绍 Kafka 中的生产者 Producer。生产者属于Kafka客户端,负责将消息发布到 Kafka 集群,以供消费者进行消费。本篇文章在 Kafka 生产者源代码的基础上,对生产者的创建,生产者内部的一些重要组件和生产者发送消息的大体流程进行介绍,并且对生产者的源代码增加了注释来方便理解。
2024-07-08 22:23:45 678
原创 Kafka简介
Kafka是Apache软件基金会的一个开源的分布式事件流处理平台,由Scala和Java编写。Kafka可以提供高吞吐量且低延迟的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据,并且其功能均以分布式、高度可扩展、弹性、容错和安全的方式提供。
2024-06-24 22:18:10 617
原创 ThreadPoolExecutor源码分析
ThreadPoolExecutor是JDK中用于创建线程池的类,其内部主要包含一个工作线程Worker的集合和一个任务队列workQueue用于处理任务。本篇文章在ThreadPoolExecutor源代码的基础上,对ThreadPoolExecutor中主要的添加任务,执行任务,获取任务等操作进行分析,并增加了代码注释,帮助理解JDK中ThreadPoolExecutor的源代码。
2024-06-17 20:56:05 244
原创 ConcurrentHashMap源码分析
ConcurrentHashMap是一个线程安全的并发容器,内部主要基于哈希结构。ConcurrentHashMap在JDK1.7到JDK1.8时内部结构有较大的变化,本文主要对JDK1.8中ConcurrentHashMap的源代码进行讨论。本篇文章在ConcurrentHashMap源代码的基础上,对主要的查找、插入和扩容等操作进行分析,并增加了详细的代码注释,帮助理解ConcurrentHashMap的源代码。
2024-04-05 18:25:48 946
原创 ConcurrentSkipListMap源码分析
ConcurrentSkipList采用了大量CAS操作来代替锁,实现线程安全的并发Map。其总体结构与基本的跳表类似,但是为了确保线程安全,在普通跳表的插入、查询等操作基础上加入了并发删除算法,并且在这些主要操作的内部加入了对于并发冲突的检查,配合CAS不断重试来实现线程安全。
2024-01-17 21:38:51 930
原创 跳表 SkipList
考虑到数据结构的可扩展性,结点的 Key 与 Value 均定义为泛型。其中 T key 继承Comparable接口,保证 key 可以用于比较排序,E Value 则用于存储结点的值。每个结点包含一个 forward 数组来存储索引中下一个索引结点的引用。该数组在初始化时,大小被设定为该结点的索引层数,以减少空间浪费。
2023-12-30 21:05:13 1104 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人