滑动窗口

固定窗口的问题


我们假设这个固定窗口的大小为1,也就是每次只能发送一个数据,只有接收方对这个数据进行了确认后才能发送第二个数据。在图中我们可以看到,发送方每发送一个数据接收方就要给发送方一个ACK对这个数据进行确认。只有接收了这个确认数据以后发送方才能传输下个数据。
这样大大降低了网络吞吐量。

Read more »

ICMP

ping 基于ICMP协议,ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
ICMP报文格式如下,封装在IP包里面,工作在网络层:

Read more »

HTTP1.0

每一个请求建立一个TCP连接,请求完成后立马断开连接。这将会导致2个问题:连接无法复用,head of line blocking
连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。head of line blocking会导致带宽无法被充分利用,以及后续健康请求被阻塞.

Read more »

用法

有时候模板名称很长,我们想用一个别名替代这串模板声明:
看似好像跟#define一样,就像下面这样:

1
#define Vec<T> template<typename T> std::vector<T,MyAlloc<T>>
Read more »

基本形式

lambda表达式的本质就是重载了()运算符的类,这种类通常被称为functor,即行为像函数的类。因此lambda表达式对象其实就是一个匿名的functor。
一个标准的lambda表达式包括:捕获列表、参数列表、mutable指示符、尾置返回类型(->返回类型)和函数体:

Read more »

源从何来

很长时间以来我们都希望有这么一个功能:给定一个对象,通过某个函数或者关键字,获得它的类型。c++有typeid的实现,也就是返回一个对象的typeid字符串,但是这个字符串不能用来声明一个新变量。因此c++11就出现了decltype这个关键字。

Read more »