0%

📌wolai制作,原文:https://www.wolai.com/ravenxrz/d4CYcWtC6M86RQyVAuKT2d

花了1~2 week的时间过完了经典的C网络库muduo实现,和学习LevelDB的时候不同,那个时候主要学习C的编程知识,而muduo主要学习的是设计,当然还有一些编程技巧。本篇总结下通过muduo学习到了哪些内容。

阅读全文 »

📌本文采用wolai制作,link: https://www.wolai.com/ravenxrz/ty4wvA5PaaHLbgDs4oofRE

前面几篇文章已经把muduo最核心的链路分析完成,包括事件循环、线程池、连接监听、建立,处理的全链路。本篇分析一些其他工具类,包含三个:Buffer、日志和定时器。

阅读全文 »

📌本文采用wolai制作, link.

前文已经分析了完整的 事件循环 和 新建连接 流程,相当于下层基础设施已经完毕,现在看上层应用咋玩的。

阅读全文 »

📌本文采用wolai制作, link

前文muduo源码分析1-事件循环(上)分析了EventLoop及其相关类的基本原理,但是还残留了一个问题,即EventLoop的线程模型是怎么样的?

阅读全文 »

📌本文采用wolai制作,原文链接:https://www.wolai.com/ravenxrz/wQ6VWz7rhYAK4NWReW5ziB

std::thread 是c11后引入的标准线程库。作为c中最重要的线程封装库,有必要打开看看。

注:本文所有分析基于 gcc-8.5.0 源码

一些重要结论:

📌由此可以得到一个重要结论:给std::thread传入的参数是没有引用效果的。 如果要用引用,请使用std::ref

📌此处可知,thread::get_id 返回的是 pthread_t, 该值被pthread_create初始化,所以并不代表linux下的thread id

📌thread不支持copy语义,仅支持move语义, 且move operator=的前提是,当前线程已经不是joinable的,否则会有资源泄露。

阅读全文 »

IEEE 2013-BwTree·

📌文本采用wolai制作,原文link: https://www.wolai.com/ravenxrz/oRqJQFiQUHU9zSprtUp3tX

原文名: The Bw-Tree: A B-tree for New Hardware Platforms

总结:

本文介绍了Bw-Tree,一种针对新型硬件平台设计的高度优化的B树数据结构。Bw-Tree通过多核优化和与缓存友好的特性,实现了高效的并发操作和数据访问。它的特点是支持delta更新和使用日志结构存储,这有助于提高缓存命中率并减少不必要的磁盘I/O操作。

Bw-Tree的设计考虑到了现代硬件的特点,它包括三个层次:Bw-Tree层、缓存层和闪存层,其中缓存层包含一个映射表,用于跟踪页面的物理位置和内存中的引用。这种映射机制允许Bw-Tree支持delta更新和变长物理页面,同时也使得latch free成为可能(在这篇文章之前,Btree系列还没有latch free的实现)。

文中详细讨论了Bw-Tree的多种操作,如插入、更新、删除、范围扫描、结构修改操作(SMO)和垃圾收集(GC),以及它们是如何在多线程环境下协同工作的。特别地,Bw-Tree采用了一种称为“序列化”的方法来保证操作的原子性和一致性,即使在高度并发的情况下也能保持数据完整性。

实验结果显示,Bw-Tree相对于传统的B树和无锁的跳列表表现出了显著的优势,特别是在高并发和数据密集型工作loads下。这主要得益于其对缓存的高效利用和latch free。

综上所述,Bw-Tree是一种适合现代硬件环境的高效B树实现,其设计巧妙地结合了并发优化、缓存友好性和数据持久化能力,为高性能数据存储和检索提供了强有力的支撑。

特点: 多核优化+cache friendly, update convert to delta, log structured

阅读全文 »