会员
众包
新闻
博问
闪存
赞助商
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
猫毛·波拿巴
虚心实腹,弱志强骨,为而不争
博客园
首页
新随笔
联系
订阅
管理
上一页
1
2
3
4
5
6
7
···
9
下一页
2020年8月15日
【源码】RocketMQ如何实现获取指定消息
摘要: 概要 消息查询是什么? 消息查询就是根据用户提供的msgId从MQ中取出该消息 RocketMQ如果有多个节点如何查询? 问题:RocketMQ分布式结构中,数据分散在各个节点,即便是同一Topic的数据,也未必都在一个broker上。客户端怎么知道数据该去哪个节点上查? 猜想1:逐个访问broke
阅读全文
posted @ 2020-08-15 23:14 猫毛·波拿巴
阅读(1805)
评论(0)
推荐(0)
2020年5月12日
【源码】RingBuffer(二)——消费者
摘要: 消费者如何读取数据? 前一篇是生产者的处理,这一篇讲消费者的处理 我们都知道,消费者无非就是不停地从队列中读取数据,处理数据。但是与BlockedQueue不同的是,RingBuffer的消费者不会对队列进行上锁,那它是怎样实现的呢? 概括地说,就是通过CAS原子性地得到一个可消费的序号,然后再根据
阅读全文
posted @ 2020-05-12 22:34 猫毛·波拿巴
阅读(1215)
评论(0)
推荐(0)
2020年5月10日
【源码】RingBuffer(一)——生产者
摘要: 纯CAS为啥比加锁要快? 同样是修改数据,一个采用加锁的方式保证原子性,一个采用CAS的方式保证原子性。 都是能够达到目的的,但是常用的锁(例如显式的Lock和隐式的synchonized),都会把获取不到锁的线程挂起,相对于CAS的不挂起,多了挂起和唤醒的开销。 题外话:CAS与锁的关系 CAS只
阅读全文
posted @ 2020-05-10 16:34 猫毛·波拿巴
阅读(1193)
评论(2)
推荐(0)
2020年5月1日
【杂谈】从实现角度看ChannelFuture
摘要: JDK中的Future特性 在介绍Netty的ChannelFuture之前,我们先来看看JDK中的Future是如何实现的。总的来说就是任务提交的时候会使用装饰器模式,将任务包装成一个FutureTask。当执行器执行该Task的时候,不仅仅会执行用户提交的任务,还会执行装饰器添加的额外操作,例如
阅读全文
posted @ 2020-05-01 20:25 猫毛·波拿巴
阅读(832)
评论(0)
推荐(1)
2020年4月7日
【杂谈】SpringBoot为啥不用配置启动类
摘要: 前言 在学习SparkJava、Vert.x等轻量级Web框架的时候,都遇到过打包问题,这两个框架打包的时候都需要添加额外的Maven配置,并指定启动类才能得到可执行的JAR包; 而springboot项目,似乎都不需要额外的配置,直接package就可以得到可执行的JAR包,这是怎么回事呢? Ve
阅读全文
posted @ 2020-04-07 14:49 猫毛·波拿巴
阅读(2918)
评论(0)
推荐(1)
2020年4月6日
【API知识】SpringBoot项目中@EnableXXX的原理
摘要: @EnableXX注解的使用场景 SpringBoot为开发人员提供了很多便利,例如如果想要定时功能,只要添加@EnableSchedule,即可配合@Schedule注解实现定时任务功能,不需要额外配置定时任务的处理线程,就可以直接使用(框架提供默认配置,在找不到用户自定配置的执行器时,使用默认配
阅读全文
posted @ 2020-04-06 18:40 猫毛·波拿巴
阅读(1614)
评论(0)
推荐(2)
2019年9月9日
【杂谈】再看生产-消费模式
摘要: 生产者和消费者之间为什么隔着一个队列? 首先,生产者与消费者由于速度的不一致,所以需要一个空间用于缓冲。这可以将生产者与消费者解耦,生产者产出数据的时候,不需要把数据交到消费者手上才行,只要把数据丢入缓冲区就好。这样就可以各做各的。 为什么缓冲区是一个队列? 通常情况下,这个缓冲区的数据结构是一个有
阅读全文
posted @ 2019-09-09 21:39 猫毛·波拿巴
阅读(384)
评论(0)
推荐(1)
2019年7月27日
【杂谈】Hash表与平衡树
摘要: hash表与平衡树查询数据的时间复杂度是多少? hash表为O(1),平衡树为O(logn) 这个时间复杂度是如何得出的? 时间复杂度是按照最糟糕的情况来的。但即使是最糟糕的情况,hash表也只需要计算一次,就可以定位到数据(对于常见的实现,实际上是定位到桶,然后在桶内遍历)。而对于平衡树,例如AV
阅读全文
posted @ 2019-07-27 10:59 猫毛·波拿巴
阅读(607)
评论(0)
推荐(0)
2019年7月26日
【杂谈】如何对Redis进行原子操作
摘要: 什么时候需要进行需要原子操作? 很常见的例子,就是利用Redis实现分布式锁。 实现锁需要哪些条件? 我们知道要实现锁,就需要一个改变锁状态的方法。这个方法能原子地对锁的状态进行检查并修改。如果修改成功,则意味着获得了锁。对于硬件,它提供的就是test-and-set,compare-and-swa
阅读全文
posted @ 2019-07-26 15:49 猫毛·波拿巴
阅读(17371)
评论(2)
推荐(2)
2019年6月30日
【杂谈】从底层看锁的实现2
摘要: 前言 我的上一篇博客的案例中,请求锁的线程如果发现锁已经被其他线程占用,它是通过自旋的方式来等待的,也就是不断地尝试直到成功。本篇就讨论一下另一种方式,那就是挂起以等待唤醒。 注:相关代码都来自《Operating System: Three Easy Pieces》这本书。 自旋哪里不好? 先说明
阅读全文
posted @ 2019-06-30 10:56 猫毛·波拿巴
阅读(2398)
评论(0)
推荐(4)
上一页
1
2
3
4
5
6
7
···
9
下一页
公告