More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
未分类

leveldb-1 Overall

Overall 开始看leveldb的代码。leveldb整体代码量不多,所以读起来应该不会很困难。并且有比较完善的leveldb handbook。读得时候要多加考虑他的设计因素。 这次从doc中的index看一下整体的概念。文档在这里 #include <cassert> #include "leveldb/db.h" leveldb::DB* db; leveldb::Options options; options.create_if_missing = true; leveldb::Statu…

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

brpc-15 bthread_id

bthread_id 这里的bthread id不是标识bthread的identifier,而是用于同步的一种数据结构 我们之前在channel中看到过他,用来做同步的brpc brpc中也有相关的文档 这么看他的名字叫rpc id更合适一些 这里粘一下文档的东西 bthread_id包括两部分,一个是用户可见的64位id,另一个是对应的不可见的bthread::Id结构体。用户接口都是操作id的。从id映射到结构体的方式和brpc中的其他结构类似:32位是内存池的位移,32位是version。前者O(1)时间定…

2022年6月15日 0条评论 83点热度 0人点赞 sheep 阅读全文
daily

Daily C/C++ piecewise_construct

piecewise_construct 之前就被piecewise construct折磨住过。后来重新看一下发现其实在cppreference中写的很明白了 piecewise constuct实际上就是一个empty class tag,他的作用就是为函数添加一个可重载的参数,从而避免歧义 The overloads that do not use std::piecewise_construct_t assume that each tuple argument becomes the element of …

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

brpc-14 Channel

Channel 这一次看看channel 之前我就画过这个图。channel的作用就是从client向server发送请求。核心方法就是CallMethod。 然后请求到server的时候会被event dispatcher拿出来,然后调用Process,即切割数据并处理。 因为brpc是基于protobuf这个框架的,所以他的channel base是继承自protobuf的RpcChannel Weight表示的是权重。不同类型的channel有不用的权重 而protobuf的RpcChannel的定义则更为简…

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

brpc-13 Socket

Socket bthread相关的基本上结束了。这次重新看一下socket 在官方文档中有说,Socket的作用是让我们可以在多线程环境下使用fd。我个人的理解就是要多线程使用需要两点,引用计数+锁。SocketID的作用类似弱引用指针,我们可以通过SocketID来获取对应socket的unique ptr。并且SocketID可以作为epoll的data,而weak ptr不可以。并且shared ptr和weak ptr不能阻止后续的引用。如果一个server要退出时,不断的有请求到来,那么引用计数可能迟迟不…

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

brpc-12 ExecutionQueue

ExecutionQueue execution queue在brpc中已经有相关的文档。就在execution_queue.md中 可以看到这个execution queue最开始是实现多线程向同一个fd写数据。之前我们已经看到过他相关的机制了。就是通过原子交换来获得所有权。 execution queue的任务在另一个单独的线程中执行。并保证执行顺序和提交顺序一致。同时支持多线程并发提交任务。(这里的提交就是插入) 这个execution queue是泛型的,可以创建多个不同类型的execution queue…

2022年6月13日 0条评论 80点热度 0人点赞 sheep 阅读全文
database

Access Path Selection in Main-Memory Optimized Data Systems: Should I Scan or Should I Probe?

Access Path Selection in Main-Memory Optimized Data Systems: Should I Scan or Should I Probe? Abstract 列式数据分析引擎的发展引起了一系列对scan operator的优化。比如column-group storage, vectorized execution, shared scans, working directly over compressed data, using SIMD and multi-co…

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

brpc-11 bthread remain

bthread remain 这一节把bthread相关的收收尾。把之前留下的坑填一下。 最主要的就是interrupt了 用来打断在butex上的睡眠 注释有说到如果当前bthread没有被阻塞的话,这次interrupt就会被记住,然后在下一次阻塞的时候进行检查。 这里先调用interrupt and consume waiters 通过原子操作把current waiter拿出来。这样我们就可以获得butex上对应的结点。 然后用erase from butex because of interruption…

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

brpc-10 TimerThread

TimerThread 这次我们看看timer thread 之前已经大概知道他是干什么的了。在注释中也比较清楚 即在指定时间运行指定任务。注意运行任务的是独立的一个线程,添加任务和删除任务还是由调用者进行,而不是通过一些事件去分发。 先看看成员变量 这个stop原子量很常见了,用来停掉无限循环的代码的 option指的是timer thread的一些配置 timer thread是通过哈希来定位具体的任务的。所以我们有若干个bucket mutex则用来保护nearest run time _thread则是用来…

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

brpc-9 butex

butex Butex就是可以在pthread和bthread中通用的futex-link primitive 可以看到比较熟悉的API。创建,删除,wake,wait。 还有两个不是那么熟悉的,就是wake except,以及requeue 最开始的两个例子。对应了wait和wake的顺序。要么wait可以看到新的value,然后停止wait。要么wait被wake唤醒。 一个butex有一个原子量,也就是对应的futex-word。若干个等待者,还有一个lock 这里可以看出来和我们之前看的brpc内部的fut…

2022年6月8日 0条评论 99点热度 1人点赞 sheep 阅读全文
12345…20
分类
  • ARTS
  • C++
  • CSAPP
  • daily
  • database
  • leetcode
  • linux
  • ml
  • paper
  • rust
  • ScummVM
  • tech
  • 其他
  • 未分类
  • 笔记
  • 算法
  • 计算机图形学
归档
  • 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