Post

touch-fish 20

BJ写了3个, c++的标准库确实好用

开启卓越模式,避免异构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来看参数+调整的

限流的算法

  1. 时间窗口计数->

    缺点是窗口交接可能迸发大流量,但实现很简单

  2. 滑动窗口

    滑动窗口算法通过将时间分为多个小的时间段,每个时间段内维护一个独立的计数器。当一个请求到达时,它会被分配到当前时间所在的小时间段,并检查该时间段的计数器是否已达到限制。如果未达到,则允许请求并增加计数;如果已达到,则拒绝请求。随着时间的推移,旧的时间段会淡出窗口,新的时间段会加入。缺点就是计算稍大,需要不断挪窗口数组的内存

  3. 漏桶算法

    看起来要有一个异步逻辑去处理push进队列的请求。

  4. 令牌桶

    令牌桶算法使用一个令牌桶来调节数据流的速率,允许一定程度的流量突发。桶初始时为空,并以固定的速率填充令牌,直至达到预设的容量上限。与漏桶算法不同,令牌桶算法在桶未满时,可以在每个时间间隔内向桶中添加多个令牌,从而积累处理突发请求的能力。当请求到达时,如果桶中存在令牌,算法会从桶中移除相应数量的令牌来处理请求。如果桶中的令牌不足,请求将被延迟处理或根据策略拒绝服务。如果桶已满,额外的令牌将不会被添加,确保了令牌数量不会超过桶的容量限制。

综合看下来,要么写时间窗口写个简单的,要么就令牌桶。

柔性数组在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

compiler optimize

This post is licensed under CC BY 4.0 by the author.

Trending Tags