touch-fish 20
BJ写了3个, c++的标准库确实好用
- Five Popular Myths about C++, Part 1
- Five Popular Myths about C++, Part 2
- Five Popular Myths about C++, Part 3
开启卓越模式,避免异构cpu的性能调度问题
13带cpu异构,开启卓越模式,前台的服务就会用大核,VM这种就不至于全跑小核了
1
powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61
makefile教程
std::ref
ref在容器里存下来,能用这种玩意。因为ref是not assignable,只要引用被初始化了就不能再变了。而且这玩意也无法被eraseable(since c++11)
所以你可以搞个骚的,这样玩:
1
2
3
4
5
6
std::string s1{"Hello"};
std::string s2{","};
std::string s3{"World!"};
std::vector<std::reference_wrapper<std::string>> v {
std::ref(s1), std::ref(s2), std::ref(s3)
};
另外的用处就是老生常谈的bind + thread用这个了。
perfbook,常读常新
shell教程
写一个shell by example
通过实验深入了解 TCP 连接的建立和关闭
讲了下tcp的option,还有些内核可配置的参数。半连接队列 + 全连接队列 + 连接保活的配置,基本是靠iptables来做试验的,netstat来看状态的
用sysctl来看参数+调整的
限流的算法
- 时间窗口计数->
缺点是窗口交接可能迸发大流量,但实现很简单
- 滑动窗口
滑动窗口算法通过将时间分为多个小的时间段,每个时间段内维护一个独立的计数器。当一个请求到达时,它会被分配到当前时间所在的小时间段,并检查该时间段的计数器是否已达到限制。如果未达到,则允许请求并增加计数;如果已达到,则拒绝请求。随着时间的推移,旧的时间段会淡出窗口,新的时间段会加入。缺点就是计算稍大,需要不断挪窗口数组的内存
- 漏桶算法
看起来要有一个异步逻辑去处理push进队列的请求。
- 令牌桶
令牌桶算法使用一个令牌桶来调节数据流的速率,允许一定程度的流量突发。桶初始时为空,并以固定的速率填充令牌,直至达到预设的容量上限。与漏桶算法不同,令牌桶算法在桶未满时,可以在每个时间间隔内向桶中添加多个令牌,从而积累处理突发请求的能力。当请求到达时,如果桶中存在令牌,算法会从桶中移除相应数量的令牌来处理请求。如果桶中的令牌不足,请求将被延迟处理或根据策略拒绝服务。如果桶已满,额外的令牌将不会被添加,确保了令牌数量不会超过桶的容量限制。
综合看下来,要么写时间窗口写个简单的,要么就令牌桶。
柔性数组在c++里的兼容性问题
1
2
3
4
5
6
7
8
// FLEXLEN
#if defined(__STDC_VERSION) && (__STDC_VERSION >= 1999L)
#define FLEXLEN
#elif defined(__GNUC__) && (__GNUC__ >= 2)
#define FLEXLEN 0
#else
#define FLEXLEN 1
#endif
柔性数组在c++的时候还是写1把,0支持的不好, 当然缺点就是之前这里不占内存,现在这里要占一个对齐的内存了。。。
c++网络库对比
对比了下io