摘要: 无锁队列的实现 无锁队列的实现原理一般是利用 Retry-loop 和 CAS 等原子操作。 现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。 例如 CAS(Compare And Swap)的实现原理: bool compare_and_swap (in 阅读全文
posted @ 2024-11-13 16:49 如果的事 阅读(7) 评论(0) 推荐(0) 编辑
摘要: Roaring Bitmap 原理 Roaring Bitmaps 就是一种压缩位图索引,后文统称 RBM,RBM 的用途和 Bitmap 很差不多(比如说索引),只是说从性能、空间利用率各方面更优秀了。 RBM 的主要思想并不复杂,简单来讲,有如下三条: 我们将 32-bit 的范围 ([0, n 阅读全文
posted @ 2024-11-05 18:00 如果的事 阅读(11) 评论(0) 推荐(0) 编辑
摘要: Epoch Based Reclamation Epoch Based Reclamation epoch based reclamation 算法参考文档: http://www.cs.toronto.edu/~tomhart/papers/tomhart_thesis.pdf https://a 阅读全文
posted @ 2022-10-21 23:56 如果的事 阅读(849) 评论(0) 推荐(0) 编辑
摘要: 内存对齐 先了解下C/C++基本类型的字节占用情况, alignas 关键字 #pragma pack(N) pragma pack 规定的对齐长度,实际使用的规则是: 结构(如struct,union,或者class )内部的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pra 阅读全文
posted @ 2022-05-06 18:45 如果的事 阅读(577) 评论(0) 推荐(0) 编辑
摘要: Hazard Pointer 先看个例子: int *p = new int(2);void reader() { if (nullptr != p) { //nullptr是C++11中引入的 cout << *p << endl; }}void writer() { delete p; p = 阅读全文
posted @ 2022-05-06 15:18 如果的事 阅读(203) 评论(0) 推荐(0) 编辑
摘要: Thread Local Storage 我们知道多线程共享同一个进程的地址空间,对全局变量来说,某一个线程对其修改会影响其他所有线程。 如果我们需要一个变量在每个线程中都能访问,并且值在每个线程中互不影响,这就是 Thread Local Storage(TLS,也称 “线程私有数据”)。 Lin 阅读全文
posted @ 2021-07-13 16:13 如果的事 阅读(1109) 评论(0) 推荐(0) 编辑
摘要: 广告索引(定向)的布尔表达式 在搜索领域,索引是一项非常重要的技术,直接影响到查询的效率,其基本的流程是:文章先进行分词、计算权重,然后利用词和文档的信息建立倒排索引,在查询的时候,得到符合条件的文档的id集合,然后利用正排索引返回文档的详细信息。 在计算广告中,广告主通常会定义广告投放的条件,例如 阅读全文
posted @ 2021-05-14 19:38 如果的事 阅读(1694) 评论(0) 推荐(0) 编辑
摘要: C++ 浮点数的存储与精度 先看个例子(如下),我们看下int、float、double在内存的二进制表示 #include<stdio.h> #include <stdlib.h> #include <string.h> #include<cstdlib> bool isLittleEndian( 阅读全文
posted @ 2021-01-09 17:23 如果的事 阅读(4735) 评论(0) 推荐(1) 编辑
摘要: 端口复用与惊群效应 REUSEADDR 假设同一个机器上有2个套接字,分别bind到 ip1:port1、ip2:port2,如果 port1 == port2,则第二个bind的套接字会有"Address already in use"的错误。 为了允许多个套接字绑定到同一个port上,可以打开S 阅读全文
posted @ 2021-01-07 19:45 如果的事 阅读(1063) 评论(0) 推荐(0) 编辑
摘要: 简单排序 冒泡排序 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。 直观表达,每一趟遍历,将一个最大的数移到序列末尾。 void bubbleSort(int* array, int len) { for (int n = 0 阅读全文
posted @ 2020-12-20 16:44 如果的事 阅读(119) 评论(0) 推荐(0) 编辑