C++ 服务端 性能优化
编写正常运行的程序很容易,但一旦数据量大起来,对代码的性能就需要认真考虑了。对于服务器来说,如果客户端一次访问,就需要话费几百毫秒,那么一旦每秒的访问次数多起来,后续的请求就会造成很明显的延迟。严重影响用户体验。最近做后端服务也遇到了一些需要优化的问题,数据量大了后,有明显延迟。 性能优化的前提是良好的构架设计:如果架构本身的设计就存在问题,在怎么优化也所能提升的空间也是很小。根据二八原则,大部分性能应该消耗在很少的地方,所以优化的关注点就在于那20%最耗时的代码块,解决了这个问题,整体性能就会有很大的提升。 代码层面的优化一般涉及到一下方面: ##1.并发模型的选择 对于不同的功能需要用不同的并发模型,适合单线程还是多线程,以及线程池这些都会影响到性能,对于服务器,模块是io密集型还是计算密集型。例如如果一次请求是需要做很多的计算,那么用线程池是合理的能够简化编程,但是如果一次请求主要时间是等待io,那么线程池是无法提升吞吐量的。 ##2.数据的存储 ###容器的选择 数据对象的存储方式取决于对数据的使用方式,就拿C++容器来说,如果要存储物品信息,一般系统中更多的是根据物品id来获取物品信息,那么久需要用key-value来存取,但map是红黑树,unorder_map是哈希表,哈希表的查询时间是O(1),而对于map,插入、删除都是O(logN),最坏和平均都是。 ##