linux c++应用程序内存高或者占用CPU高的解决方案_20161213

  对于绝大多数实时程序来说,实时处理相关程序中的循环问题所带来的对机器的损耗和自身的处理速度的平衡,以及与其他程序的交互以及对其他功能的影响难免会成为程序设计中最大的障碍同时也是最大的突破点。

  在所有这类问题面前,我们统一的解决方案几乎都是多线程操作,一点点将机器的性能发挥到我们可以控制的最大,并将我们处理速度提升到我们可以控制的最高高度。

  然而,对于很多人来说,多线程所带来的不稳定性无疑就是噩梦。

  譬如:

  起初我们在写单线程程序时,我们塑造了一条流水线,流水线上有几个环节,我们安排了一个工人,按部就班地将一个产品的一个个环节走完,然后再进行下一个产品的工作,慢慢地,随着对处理速度的要求和机器性能的提升,这种方案越来越out,我们开始借助多线程,我们指派多个工人甚至几十个工人同时作业,但是随着速度的几何倍的提升,真正的问题接踵而来。

  我们开始拆分流水线上的环节,将工人们开始按照每个流水线上的环节的工作强度开始分配人数。然而随着程序的不断的累加代码和功能,有两个问题在我们的开发环节中越来越明显,会极大的造成后期维护的精力和难度,最严重时甚至能毁掉整个程序---那就是内存和CPU的问题。

  内存问题及解决方案:

  在流水线中我们使用类将一个个我们的逻辑功能进行封装,随着处理要求的提升,我们不断地完善我们底层的内存块和内存池,不过随着代码的冗杂,里面必然会出现无法释放的内存块或超出使用的内存块,这样轻则会造成程序占用内存越来越高,重则导致指针乱调导致程序崩溃甚至数据莫名其妙的混乱。

  解决的思路我们可以密切的监视每块的内存的创建和销毁阶段,如我们在内存申请时向里面加点料,再在内存销毁时检测一下我们加的料。

  CPU高及解决方案:

  随着任务环节的越来越多,我们将我们程序分层,中间以各种方式链接,但是尽管多么合格的数据结构去协调各个环节,总有环节对接失误的时候,紧接着随之到来便是循环执行次数过多甚至会导致死循环,更严重的会出现死锁的情况。

  我们面对这种情况,如果我们在设计程序就想到了,我们可以仔细分析各个环节然后对整个结构提出最具有包容性。然而我们再后期扩展之时遇到只能不断地优化,逻辑清晰化。

原文地址:https://www.cnblogs.com/daochong/p/6169443.html