MyDisruptor V3版本介绍 在v2版本的MyDisruptor实现多消费者.消费者组间依赖功能后.按照计划,v3版本的MyDisruptor需要支持多线程消费者的功能. 由于该文属于系列博客的一部分,需要先对之前的博客内容有所了解才能更好地理解本篇博客 v1版本博客:从零开始实现lmax-Disruptor队列(一)RingBuffer与单生产者.单消费者工作原理解析 v2版本博客:从零开始实现lmax-Disruptor队列(二)多消费者.消费者组间消费依赖原理解析 MyDisrup…
MyDisruptor V4版本介绍 在v3版本的MyDisruptor实现多线程消费者后.按照计划,v4版本的MyDisruptor需要支持线程安全的多线程生产者功能. 由于该文属于系列博客的一部分,需要先对之前的博客内容有所了解才能更好地理解本篇博客 v1版本博客:从零开始实现lmax-Disruptor队列(一)RingBuffer与单生产者.单消费者工作原理解析 v2版本博客:从零开始实现lmax-Disruptor队列(二)多消费者.消费者组间消费依赖原理解析 v3版本博客:从零开始实…
1.lmax-Disruptor队列介绍 disruptor是英国著名的金融交易所lmax旗下技术团队开发的一款java实现的高性能内存队列框架 其发明disruptor的主要目的是为了改进传统的内存队列实现如jdk的ArrayBlockingQueue.LinkedBlockingQueue等在现代CPU硬件上的一些缺陷 1. 伪共享问题 现代的CPU都是多核的,每个核心都拥有独立的高速缓存.高速缓存由固定大小的缓存行组成(通常为32个字节或64个字节). CPU以缓存行作为最小单位读写,且一…
解决的问题 当我们有多个消息的生产者线程,一个消费者线程时,他们之间如何进行高并发.线程安全的协调? 很简单,用一个队列. 当我们有多个消息的生产者线程,多个消费者线程,并且每一条消息需要被所有的消费者都消费一次(这就不是一般队列,只消费一次的语义了),该怎么做? 这时仍然需要一个队列.但是: 1. 每个消费者需要自己维护一个指针,知道自己消费了队列中多少数据.这样同一条消息,可以被多个人独立消费. 2. 队列需要一个全局指针,指向最后一条被所有生产者加入的消息.消费者在消费数据时,不能消费到这…
大家好,今天我将跟大家分享一下 Flink 里面的 Checkpoint,共分为四个部分.首先讲一下 Checkpoint 与 state 的关系,然后介绍什么是 state,第三部分介绍如何在 Flink 中使用state,第四部分则介绍 Checkpoint 的执行机制. Checkpoint 与 state 的关系 Checkpoint 是从 source 触发到下游所有节点完成的一次全局操作.下图可以有一个对 Checkpoint 的直观感受,红框里面可以看到一共触发了 569K 次 C…
概述 本文是基于jdk8_271源码进行分析的. LinkedList底层是基于链表实现.链表没有长度限制,内存地址不需要固定长度,也不需要是连续的地址来进行存储,只需要通过引用来关联前后元素即可完成整个链表的连续.所以链表的优点就是添加删除元素比较快,只需要移动指针,并且不需要判断扩容.缺点就是因为没有索引,所以在查询和遍历元素时候比较慢. 使用场景:在增删操作使用较多,查询遍历操作使用较少情况下比较适合去使用:例如:拿来当栈使用. 数据结构 继承实现关系 1 public class Lin…
概述 在SpringMVC的使用时,往往会用到@RequestBody和@ResponseBody两个注解,尤其是处理ajax请求必然要使用@ResponseBody注解.这两个注解对应着Controller方法的参数解析和返回值处理,开始时都是只知其用,不知原理.我们来看个例子. @RequestMapping("/requestBody") public void requestBody(@RequestBody String body, Writer writer) throws…
概述 本文是基于jdk8_271版本进行分析的. HashMap是Map集合中使用最多的.底层是基于数组+链表实现的,jdk8开始底层是基于数组+链表/红黑树实现的.HashMap也会动态扩容,与ArrayList不同的是,HashMap有一个阈值字段,元素数量达到阈值之后就会进行扩容.HashMap允许key为null.同时HashMap也是线程不安全的. 数据结构 实现继承关系 1 public class HashMap<K,V> extends AbstractMap<K,V&g…
MyDisruptor V6版本介绍 在v5版本的MyDisruptor实现DSL风格的API后.按照计划,v6版本的MyDisruptor作为最后一个版本,需要对MyDisruptor进行最终的一些细节优化. v6版本一共做了三处优化: 解决伪共享问题 支持消费者线程优雅停止 生产者序列器中维护消费者序列集合的数据结构由ArrayList优化为数组Array类型(减少ArrayList在get操作时额外的rangeCheck检查) 由于该文属于系列博客的一部分,需要先对之前的博客内容有所了解才…
MyDisruptor V5版本介绍 在v4版本的MyDisruptor实现多线程生产者后.按照计划,v5版本的MyDisruptor需要支持更便于用户使用的DSL风格的API. 由于该文属于系列博客的一部分,需要先对之前的博客内容有所了解才能更好地理解本篇博客 v1版本博客:从零开始实现lmax-Disruptor队列(一)RingBuffer与单生产者.单消费者工作原理解析 v2版本博客:从零开始实现lmax-Disruptor队列(二)多消费者.消费者组间消费依赖原理解析 v3版本博客:从…