More than code

未分类
未分类

brpc-bvar

brpc-bvar 这篇文章介绍一下bvar的实现,之前有写过一些brpc的文章放到了我的博客中,有同学感兴趣也可以去看看:http://heavensheep.xyz/?s=brpc 有关bvar的实现和使用方法可以看这里: https://github.com/apache/brpc/blob/master/docs/cn/bvar_c%2B%2B.md https://github.com/apache/brpc/blob/master/docs/cn/bvar.md 因为我也没用过多维度的bvar,所以就只…

2023年7月2日 0条评论 102点热度 0人点赞 sheep 阅读全文
未分类

GPT as innodb master

GPT as innodb master 向GPT学习innodb。虽然我还不清楚他回答的到底是不是正确的,但是看上去还是蛮正确的。 感觉只需要几句prompt GPT4就变成innodb大师了。 粘一下我和他的对话记录,我的目的是想知道Innodb有没有类似ARIES中提到的CLR机制。

2023年5月3日 0条评论 307点热度 1人点赞 sheep 阅读全文
未分类

C++ Coroutines Notes

C++ Coroutines 这个文章算是一个个人的笔记,想简单记录一下Coroutine相关的细节,以便后续回忆。如果想从头学习coroutine的话,我更推荐这个系列,本文也是从这个系列中摘取一些关键点记录而已。 Awaiter A type that supports the co_await operator is called an Awaitable type. An Awaiter type is a type that implements the three special methods tha…

2023年4月23日 0条评论 181点热度 0人点赞 sheep 阅读全文
未分类

async_simple Coroutine

async_simple Coroutine 简单看看async simple的coroutine的实现。 async_simple的coroutine是通过Lazy<T>实现的,即每一个Coroutine的返回值都是Lazy<T>,然后我们可以通过co_await Lazy来等待一个coroutine的返回值。 所以这里要关注的有两个点,一个是Lazy是怎么开始执行一个coroutine的,即关注Lazy的promise_type,另一个就是在coroutine内去co_await一个La…

2023年4月23日 0条评论 243点热度 4人点赞 sheep 阅读全文
未分类

async_simple Future/Promise 概览

async_simple Future/Promise 概览 简单看看async_simple的Future/Promise。注意这里不会关注coroutine/uthread部分 Future/Promise这块和folly,以及seastar的接口都是类似的,之后可以再写一下他们实现上的区别。 简单来说,就是Promise可以获取一个对应的Future,对应生产者和消费者。然后Future可以通过then(Func &&func)来创建一个continuation,表示在这个future获取到结…

2023年4月16日 0条评论 215点热度 0人点赞 sheep 阅读全文
未分类

leveldb-9 Cache

Cache 这次看看Cache 和文档中的不同,文档中的这个是goleveldb的。而我们看的是C++的leveldb C++的leveldb就是一个简单的LRUCache 并发控制通过一个大mutex来保护。为了减少冲突分了Shard 不过leveldb中的LRU是intrusive的,他的Node内嵌了list和hashmap的变量 LRU的主体在这里,其中HandleTable是一个哈系表,由key映射到Handle上 lru和in use其实可以猜到,一个是lru的链表,一个是当前使用的,也就是pin住的链…

2022年7月8日 0条评论 372点热度 1人点赞 sheep 阅读全文
未分类

leveldb-8 SSTable(3) Read & Write

SSTable(3) Read & Write 参考文档在这里 还是看这个图。footer是固定的,通过footer去找到meta index block和index block meta index block指向filter block,为什么不直接让footer指向filter block呢?因为meta index block中存储了filter的名字,是变长的。而footer是定长的。所以增加了一个额外的indirection 代码中主要是在table builder做写操作 table buil…

2022年7月3日 0条评论 311点热度 1人点赞 sheep 阅读全文
未分类

leveldb-7 SSTable(2) filter block

SSTable(2) filter block 文档在这里 这次代码比较简单 StartBlock的作用就是不断构建索引到filter offsets Finish会把剩下的数据的filter构建出来。然后把每块对应的offset追加进来,最后加上总共的array length以及BaseLg。具体含义可以看文档 result就是这些data block 可以看到核心的逻辑就是这个GenerateFilter了。他会先把当前的buffer切成原本的key。然后通过CreateFilter创建filter 这里的Cr…

2022年7月3日 0条评论 230点热度 0人点赞 sheep 阅读全文
未分类

leveldb-6 SSTable(1) data block

SSTable(1) data block 每次minor compaction都会生成新的sstable,major compaction会将若干个sstable合并成一个大的sstable。 这次我们看一下sstable的读写过程。参考文章在这里 一个sstable文件按照块划分,用来提高读写效率。每个块的大小为4kb,每个block中除了存储数据还有压缩类型以及校验码 sstable中不同的block有不同的功能 data block 由于leveldb是按序存储,所以我们会使用类似前缀压缩的技术。不同的是每…

2022年6月21日 0条评论 290点热度 0人点赞 sheep 阅读全文
未分类

Rust ODT

Rust ODT ODT主要处理的是包含区间赋值的问题。以前的名字叫Old Driver Tree。核心思路就是通过随机数据的情况下,区间赋值的操作可以合并很多区间为一个整块。我们通过三元组的形式,即left,right,value来表示区间。在查询的时候就只查询范围内的三元组。由于区间赋值可以合并区间,所以总共要查询的数量很少。 可以从这道题来了解这个数据结构 ODT的核心就是两个函数。一个是split,将我们维护的区间中在一个点处断开。还有一个是assign,即区间赋值 fn split(&mut se…

2022年6月20日 0条评论 236点热度 1人点赞 sheep 阅读全文
1234
分类目录
  • ARTS
  • C++
  • CSAPP
  • daily
  • database
  • leetcode
  • linux
  • ml
  • paper
  • rocksdb
  • rust
  • ScummVM
  • tech
  • 其他
  • 未分类
  • 笔记
  • 算法
  • 计算机图形学
归档
  • 2023年9月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年2月
  • 2023年1月
  • 2022年9月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年1月
  • 2020年12月

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS