您的位置:首页 > 数据库 > MySQL

浅谈提升程序性能的方式

2012-07-25 08:50 260 查看
自己在实际的项目中总结出以下几种提升程序性能的方式:

1.精简代码

    程序中执行最为频繁的地方,条件判断可以先执行一定要先做,代码能少写就少些,数据运算尽可能减少重复。

2.在时间和空间上求得平衡

    在计算机中时间和空间或资源是可以互换的

3.调整系统和服务的一些配置

   程序都是在某一环境下设计运行的,影响它的的因素很多,学习了解这些非主观因素也非常重要。

4.寻找高效的方法

     方法是程序的核心

下面我将结合自己对程序的实际改进经历来说明以上几点:

在做一款产品时我需要将几类服务器的消息日志筛选出指定的一些消息,并写入到数据库当中。任务的逻辑实现上比较简单,我也很快的将程序完成。在基本测试通过之后我就提交了代码。之后项目进行压测,我在此之前一直认为程序是不会出什么问题的应为代码不多,逻辑也不算复杂。测试过程所有程序都正常运行没有出什么问题。但是当我看到性能评估时我自己都被吓到了,如此少的逻辑居然占用了40%-50%cpu资源,这在服务器设计中是绝对不能容忍的。这时我才意识到我的程序有问题,完全的不合格。通过查看日志信息虽然日志数据量有些大,大约在300W条的日志数据,但是也不应该出现这种状况。这种情况下我分析了程序中执行最平凡的地方,查看算法的时间复杂度n*m,按理来说程序不应该这样的慢的,仔细查阅这部分代码发现我的筛选没有做好导致复杂度一下变为n*n。实际情况300W记录只哟10W左右必要数据。就是应为判断的不及时是的程序执行时间增加了30倍。同时在执行最多的地方我取消一些重复的运算,删除了一些不必要的代码之后再次执行发现300W的记录大概20秒就跑完了,之前的时间是10来分钟,惨不忍睹。

  精简代码虽然让程序可以高效的执行完成,但是这20S的直接影响就是cpu资源被占用完了,其他程序很难执行。在重要性上,这段程序并不需要实时的,但是其他服务器是需要及时响应的不然会产生很多超时,影响服务质量。事实上在这方面就比较好解决了,应为对时间的要求不高,我让程序5W数据睡眠一会就解决了,cpu由原先的占满直降到20%左右。用时间与空间或是资源的互换程序设计中经常会做的,如何寻求一个平衡就是我们要做的了。

  经过上面两步一般就呢过满足基本的需求了,但是有些时候还是没法解决遇到的问题。在压测的过程中我们发现mysql数据库服务的cpu占用一直居高不下,分析原因发现数据写入量过大时会有一些超时现象,查找资料后发现了数据库支持每秒的写入量大概是500条左右。在用户操作的高峰期时数据写入量超过了这一数值,直接导致数据库压力过大,cpu资源占用大。这个时候可能就需要对数据库系统有所了解,然后再自己程序和系统服务之间找到平衡。

  一些特殊的方法也可能对程序性能有很大提高。在处理日志时,由于日志量相对较大,使用一般的文件IO操作在读取磁盘文件到内存时速度不是很快,但是使用内存映射文件的方法可以很大程度上提高文件提取的速度。先前30M的日志问题使用IO操作大概是6秒左右,但是用文件映射只需要0.3ms。因此,在解决某一问题时我们应该多看看相关的技术方法,有时候一个方法会使程序的性能提升一个数量级。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息