性能点:
I/O,系统调用,并发/锁,内存分配,内存拷贝,函数调用消耗,编译优化,算法 I/O性能优化: I/O性能主要耗费点:系统调用,磁盘读写,网络通讯等 优化点:减少系统调用次数,减少磁盘读写次数,减少阻塞等待 优化手段: a. 使用非阻塞模式 b. 使用带缓存的I/O,减少磁盘读写次数 c. I/O多路复用,select/poll/epoll d. 异步I/O 系统调用: 耗费点:用户态和系统态切换时耗 优化点:减少不必要的系统调用 优化手段: a. I/O操作,根据具体情况,使用stdio库代替read/write b. 缩减不必要的系统调用, 并发/锁: 并发处理(多线程、多进程)在一定条件下可提升性能, 但如果存在共享资源,则需要有互斥锁的开销。 锁的优化: a. 线程本地变量,避免存在共享资源 b. 减少锁的粒度 c. 无锁算法,如使用atomic实现的无所队列 d. 算法上减少对共享资源的访问, 如多版本算法 内存分配: 涉及系统调用和系统内存分配的锁操作。 优化点:减少内存分配/释放的次数和频繁度 优化手段: a. 一次分配多次使用,如内存池 b. 系统内存分配替代库,如tcmalloc提高多线程环境内存分配 c. 提升对象重用程度,避免重复构造和析构 内存拷贝: 优化点:减少内存的拷贝操作 优化手段: a. 利用指针、引用代替数值拷贝 b. 写时复制技术,两个对象同时引用一份数据,只有当其中一个对象需要改写数据时,才拷贝出一个数据副本。 (std::string采用写时复制, 因此一般情况下函数按值传递和返回std::string,不存在字符串复制操作) 函数调用消耗: 函数调用时存在栈分配初始化以及后续的栈回收操作。 优化手段: a. 简单的函数,使用宏或内联方式 编译优化: 使用编译器的优化选项,带来额外的性能提升 算法: 针对特定的需求提升算法优化程度,如减少循环处理次数,使用高性能排序和搜索算法等。