今天上课,讲后台应用程序优化,老师讲的很好,从cpu、磁盘、网络三部分入手。晚上看了《深入理解计算机系统》第五章。
之前自己先考虑了一下,会从分析瓶颈、数据结构优化、设计模式应用角度——偏应用了。汗。
1. cpu处理流水线。取指、译码、执行、写回。
提高流水线预测分支的效率;剔除数据相关性、提高流水线并发;
拿出一个cpu专门处理网卡中断,其余的cpu每个一个进/线程;
以下优化有什么问题:
void twiddle1()
{
*xp += *yp
*xp += *yp
}
优化成:
void twiddle2()
{
*xp += 2* *yp
}
预分配、预计算、内存复用、对象复用;
2. 随机写改成顺序写;mmap文件到内存。
3. select 遍历 fd;epoll使用rb-tree保存信息,并使用callback机制。
但后者在大部分fd都有事件到来时并不比前者有优势,其优势在于同时只有比较少的客户端有读写事件时。
网络环境比较稳定(内网)时使用ET方式、网络不稳定、碎包比较多时使用LT。