美文网首页
关于软件开发性能的那些事

关于软件开发性能的那些事

作者: Mr_Baymax | 来源:发表于2016-06-21 16:01 被阅读70次

    1.首先我们通过一张图来认识服务端与客户端的联系与区别

    2.计算机区别于传统的优势(计算速度快 && 存储容量大)

    2.1 CPU
    计算机中,CPU充当了很重要的角色,那么在程序中我们也应该为CPU减压,应注意下面的几项:       
    >杜绝死锁(低级错误)
    >避免长时间独占(多CPU,Sleep,程序调度规划)
    >避免浪费(使用优秀的算法,减少计算量,O(n),O(n^m))
    例如: 找出下面一组数列中最大的连续子序列
    -1,2,9,5,-5,10,1,2

    2.2 内存
    在计算机中,内存属于稀缺资源,具备读取速度快的优点,所以应当避免出现:内存泄露!
    >确保资源及时释放,确保如果发生异常的情况下,也能及时释放
    >内存使用策略:牺牲空间换时间
        >预加载
        >缓存机制
        >全局变量

    2.3 硬盘
    >I/O速度永远不够快
    >硬盘:容量大,速度慢
    >内存:速度快,容量小
    >效率
       >协调内存和硬盘,CPU才能有最高的效率
       >瓶颈在与读取和保存
       >一次读,多次用
       >多次更新,一次写入
       >使用频繁的小数据常驻内存
       >I/O异常处理(注意资源释放)

    3.数据库

    >数据库连接及时释放
    >控制访问频率和单次数据量
        >如客户端同步,每次TOP200
    >冗余字段提高查询效率
        >牺牲空间换时间
        >如:Houses.PKDistrict, Houses.PKBlock
    >避免浪费(使用优秀的算法,减少计算量,O(n),O(n^m))
    >减少连接次数
    >控制单次交互的数据量和复杂度

    4.Web Service
    最不稳定最重的资源
    不要假设Web Service跟本地方法一样可靠
    永远要考虑Web Service的可能错误
        >Web Service不能访问
        >Web Service异常
        >Web Service慢(本地 网络和服务器都会导致)
        >交互格式不对(调错了?升级了?)
    永远考虑怎么减少Web Service的交互次数
    协调Web Service,合理规划频率和颗粒度

    问题:如何快速的同步10万条数据?
    分析:
    数据量可能很大     
    客户端网络可能不稳定,随时断掉
    服务器压力不能太大
    方案:
    颗粒度:每次获取200条数据(TOP 200,100K以下)
    保证数据量的前提下,不会给网络传输和服务器数据处理带来太大的压力
    断点续传机制:记录成功执行的位置,便于下次同步

    5.牺牲空间换时间(效率)
    数据库表冗余常用搜索字段
    统计性不经常变的数据
        >定期由一个计算实例去更新
        >其他只负责读取(读写分离)
    低效率的like关键字查询
        >增加索引机制
        >把like查询转换成“=”、“in”或“join”

    6.考虑系统性能而不只是局部
    要考虑局部效率
    同时要考虑满足局部效率后的代价,是否过多消耗了别的模块的资源
    比如过度调用Web Service
    考虑分布式计算,选择合适的计算节点,尽量让客户端参与更多的运算,而不是依赖云端;如:云采集,打印招贴等

    7.平衡频率和效率
    处理的任务有大小
    大任务意味着大的计算量(CPU),大的数据量(内存、网络带宽、硬盘灯)
    耗时耗资源的任务需要适当分解到一定的颗粒度去解决
    寻求:开销最小,速度最快,稳定性强壮型更好
    比如:移动端调用的Service,单次交互的JSON数据量如果>1M以上,基本算不合理;如果1秒调用了10次以上Service,也是不合理的;

    相关文章

      网友评论

          本文标题:关于软件开发性能的那些事

          本文链接:https://www.haomeiwen.com/subject/lhjgdttx.html