zoukankan      html  css  js  c++  java
  • 关于程序性能优化基础的一些个人总结

    性能点:
        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. 简单的函数,使用宏或内联方式

    编译优化:
        使用编译器的优化选项。带来额外的性能提升

    算法:
        针对特定的需求提升算法优化程度。如降低循环处理次数,使用高性能排序和搜索算法等。


  • 相关阅读:
    【bzoj2079】[Poi2010]Guilds 构造结论题
    【bzoj1899】[Zjoi2004]Lunch 午餐 dp
    【bzoj1345】[Baltic2007]序列问题Sequence 单调栈
    【bzoj1047】[HAOI2007]理想的正方形 二维RMQ
    【bzoj1044】[HAOI2008]木棍分割 二分+dp
    【bzoj5037】[Jsoi2014]电信网络 最大权闭合图
    【bzoj5018】[Snoi2017]英雄联盟 背包dp
    【bzoj5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT
    【bzoj2213】[Poi2011]Difference dp
    【bzoj2161】布娃娃 权值线段树
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7131925.html
Copyright © 2011-2022 走看看