摘要:
std::function与std::bind std::function std::function 是一个可调用对象包装器,是一个类模板,可以容纳除了类成员函数指针之外的所有可调用对象,它可以用统一的方式处理函数、函数对象、函数指针,并允许保存和延迟它们的执行。 例如 // 普通函数 int a 阅读全文
摘要:
AtomicHashMap github 仓库:https://github.com/facebook/folly/tree/main/folly 文档:https://github.com/facebook/folly/blob/main/folly/docs/AtomicHashMap.md 本 阅读全文
摘要:
Raft算法 在了解Raft之前,我们先了解一致性(Consensus)这个概念,它是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的服务器可能会崩溃或变得不可靠,它就不能和其他服务器达成一致状态。这样就需要一种Consensus协议,一致性协议是为了确保容错性,也就是即使 阅读全文
摘要:
无锁队列的实现 无锁队列的实现原理一般是利用 Retry-loop 和 CAS 等原子操作。 现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。 例如 CAS(Compare And Swap)的实现原理: bool compare_and_swap (in 阅读全文
摘要:
Roaring Bitmap 原理 Roaring Bitmaps 就是一种压缩位图索引,后文统称 RBM,RBM 的用途和 Bitmap 很差不多(比如说索引),只是说从性能、空间利用率各方面更优秀了。 RBM 的主要思想并不复杂,简单来讲,有如下三条: 我们将 32-bit 的范围 ([0, n 阅读全文
摘要:
Epoch Based Reclamation Epoch Based Reclamation epoch based reclamation 算法参考文档: http://www.cs.toronto.edu/~tomhart/papers/tomhart_thesis.pdf https://a 阅读全文
摘要:
内存对齐 先了解下C/C++基本类型的字节占用情况, alignas 关键字 #pragma pack(N) pragma pack 规定的对齐长度,实际使用的规则是: 结构(如struct,union,或者class )内部的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pra 阅读全文
摘要:
Hazard Pointer 先看个例子: int *p = new int(2);void reader() { if (nullptr != p) { //nullptr是C++11中引入的 cout << *p << endl; }}void writer() { delete p; p = 阅读全文
摘要:
Thread Local Storage 我们知道多线程共享同一个进程的地址空间,对全局变量来说,某一个线程对其修改会影响其他所有线程。 如果我们需要一个变量在每个线程中都能访问,并且值在每个线程中互不影响,这就是 Thread Local Storage(TLS,也称 “线程私有数据”)。 Lin 阅读全文
摘要:
广告索引(定向)的布尔表达式 在搜索领域,索引是一项非常重要的技术,直接影响到查询的效率,其基本的流程是:文章先进行分词、计算权重,然后利用词和文档的信息建立倒排索引,在查询的时候,得到符合条件的文档的id集合,然后利用正排索引返回文档的详细信息。 在计算广告中,广告主通常会定义广告投放的条件,例如 阅读全文