博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于程序性能优化基础的一些个人总结
阅读量:5942 次
发布时间:2019-06-19

本文共 876 字,大约阅读时间需要 2 分钟。

hot3.png

性能点:

    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. 简单的函数,使用宏或内联方式
编译优化:
    使用编译器的优化选项,带来额外的性能提升
算法:
    针对特定的需求提升算法优化程度,如减少循环处理次数,使用高性能排序和搜索算法等。

转载于:https://my.oschina.net/luckysym/blog/296624

你可能感兴趣的文章
Microsoft Excel软件打开文件出现文件的格式与文件扩展名指定格式不一致?
查看>>
ios ble 参考
查看>>
linux中注册系统服务—service命令的原理通俗
查看>>
基于托管C++的增删改查及异步回调小程序
查看>>
Oracle DBMS_STATS 包 和 Analyze 命令的区别
查看>>
给Visual Studio 2010中文版添加Windows Phone 7模板
查看>>
linux下基本命令
查看>>
windows server 2008R2 上安装配置freesshd
查看>>
手动删除SVCH0ST.EXE的方法
查看>>
已释放的栈内存
查看>>
Android网络之数据解析----SAX方式解析XML数据
查看>>
Java递归列出所有文件和文件夹
查看>>
[关于SQL]查询成绩都大于80分的学生
查看>>
Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery
查看>>
java之ibatis数据缓存
查看>>
“TNS-03505:无法解析名称”问题解决一例
查看>>
LeetCode - Longest Common Prefix
查看>>
Android图片处理
查看>>
2015年第21本:万万没想到,用理工科思维理解世界
查看>>
大家谈谈公司里的项目经理角色及职责都是干什么的?
查看>>