1、系统指令级优化
该篇文章中使用Ninja编译libyuv,以激活启用SIMD指令集,增加转码效率。(编译libyuv 64位版本,由于Visual Studio不支持64位内联,导致无法启用SIMD指令集)
- memcpy速度太慢?掌握这个技术让内存拷贝效率成倍提升这篇文章中提到,ARM处理器使用neon扩展结构可以优化内存拷贝,文章示例性能提高了8倍。并且文章中提到ARM处理器支持SIMD,而x86也是支持SSE。
2、优化拷贝函数
- 参考使用SSE指令集优化memcpy,使用SSE指令集编写fast_memcpy函数。
- 怎样写出一个更快的 memset/memcpy ? - 韦易笑的回答 - 知乎 怎样写出一个更快的 memset/memcpy ? - 知乎
不支持aarch64架构,作者在gcc4.9上测试结果大概有50%的提高,在gcc5.4上实测,结果是package除4mb性能下降外,其它性能均是略微提高的。
3、大内存分配统一使用内存池
无需编写内存池,原因:
1、内存池除了减少内存申请和释放的开销之外还有什么提升性能或者方便之处? - 陈硕的回答 - 知乎 内存池除了减少内存申请和释放的开销之外还有什么提升性能或者方便之处? - 知乎
2、如何设计内存池? - 韦易笑的回答 - 知乎 如何设计内存池? - 知乎
5、局部内存需要缓存时,同一使用bytes_buffer,以减少内存申请释放和内存复制
Muduo 设计与实现之一:Buffer 类的设计
6、改用固定内存空间,减少多线程直接的buffer锁力度,比如append数据以后仅用atomic对readindex或者writeindex加锁。