linux c++应用程序内存高或者占用CPU高的解决方案_20161213
2016-12-13 13:01
232 查看
对于绝大多数实时程序来说,实时处理相关程序中的循环问题所带来的对机器的损耗和自身的处理速度的平衡,以及与其他程序的交互以及对其他功能的影响难免会成为程序设计中最大的障碍同时也是最大的突破点。
在所有这类问题面前,我们统一的解决方案几乎都是多线程操作,一点点将机器的性能发挥到我们可以控制的最大,并将我们处理速度提升到我们可以控制的最高高度。
然而,对于很多人来说,多线程所带来的不稳定性无疑就是噩梦。
譬如:
起初我们在写单线程程序时,我们塑造了一条流水线,流水线上有几个环节,我们安排了一个工人,按部就班地将一个产品的一个个环节走完,然后再进行下一个产品的工作,慢慢地,随着对处理速度的要求和机器性能的提升,这种方案越来越out,我们开始借助多线程,我们指派多个工人甚至几十个工人同时作业,但是随着速度的几何倍的提升,真正的问题接踵而来。
我们开始拆分流水线上的环节,将工人们开始按照每个流水线上的环节的工作强度开始分配人数。然而随着程序的不断的累加代码和功能,有两个问题在我们的开发环节中越来越明显,会极大的造成后期维护的精力和难度,最严重时甚至能毁掉整个程序---那就是内存和CPU的问题。
内存问题及解决方案:
在流水线中我们使用类将一个个我们的逻辑功能进行封装,随着处理要求的提升,我们不断地完善我们底层的内存块和内存池,不过随着代码的冗杂,里面必然会出现无法释放的内存块或超出使用的内存块,这样轻则会造成程序占用内存越来越高,重则导致指针乱调导致程序崩溃甚至数据莫名其妙的混乱。
解决的思路我们可以密切的监视每块的内存的创建和销毁阶段,如我们在内存申请时向里面加点料,再在内存销毁时检测一下我们加的料。
CPU高及解决方案:
随着任务环节的越来越多,我们将我们程序分层,中间以各种方式链接,但是尽管多么合格的数据结构去协调各个环节,总有环节对接失误的时候,紧接着随之到来便是循环执行次数过多甚至会导致死循环,更严重的会出现死锁的情况。
我们面对这种情况,如果我们在设计程序就想到了,我们可以仔细分析各个环节然后对整个结构提出最具有包容性。然而我们再后期扩展之时遇到只能不断地优化,逻辑清晰化。
在所有这类问题面前,我们统一的解决方案几乎都是多线程操作,一点点将机器的性能发挥到我们可以控制的最大,并将我们处理速度提升到我们可以控制的最高高度。
然而,对于很多人来说,多线程所带来的不稳定性无疑就是噩梦。
譬如:
起初我们在写单线程程序时,我们塑造了一条流水线,流水线上有几个环节,我们安排了一个工人,按部就班地将一个产品的一个个环节走完,然后再进行下一个产品的工作,慢慢地,随着对处理速度的要求和机器性能的提升,这种方案越来越out,我们开始借助多线程,我们指派多个工人甚至几十个工人同时作业,但是随着速度的几何倍的提升,真正的问题接踵而来。
我们开始拆分流水线上的环节,将工人们开始按照每个流水线上的环节的工作强度开始分配人数。然而随着程序的不断的累加代码和功能,有两个问题在我们的开发环节中越来越明显,会极大的造成后期维护的精力和难度,最严重时甚至能毁掉整个程序---那就是内存和CPU的问题。
内存问题及解决方案:
在流水线中我们使用类将一个个我们的逻辑功能进行封装,随着处理要求的提升,我们不断地完善我们底层的内存块和内存池,不过随着代码的冗杂,里面必然会出现无法释放的内存块或超出使用的内存块,这样轻则会造成程序占用内存越来越高,重则导致指针乱调导致程序崩溃甚至数据莫名其妙的混乱。
解决的思路我们可以密切的监视每块的内存的创建和销毁阶段,如我们在内存申请时向里面加点料,再在内存销毁时检测一下我们加的料。
CPU高及解决方案:
随着任务环节的越来越多,我们将我们程序分层,中间以各种方式链接,但是尽管多么合格的数据结构去协调各个环节,总有环节对接失误的时候,紧接着随之到来便是循环执行次数过多甚至会导致死循环,更严重的会出现死锁的情况。
我们面对这种情况,如果我们在设计程序就想到了,我们可以仔细分析各个环节然后对整个结构提出最具有包容性。然而我们再后期扩展之时遇到只能不断地优化,逻辑清晰化。
相关文章推荐
- window系统svchost.exe占用CPU或者内存过高的解决方案
- Linux C++中获取指定pid、tid的CPU与内存占用信息
- window系统svchost.exe占用CPU或者内存过高的解决方案
- 将 Win32 C/C++ 应用程序迁移到 POWER 上的 Linux,第 1 部分: 进程、线程和共享内存服务
- Linux下获取占用CPU内存资源最多的10个进程的方法
- windows下通过jconsole监控linux内存,cpu占用情况
- 查看linux占用内存/CPU最多的进程
- linux 下取进程占用 cpu/内存 最高的前10个进程
- Linux 查看当前占用CPU或内存最多的5个进程
- linux查看某进程内存、CPU占用
- Linux 查看当前占用 CPU 或内存最多的 5 个进程
- Linux 查看当前占用CPU或内存最多的5个进程
- Linux 如何查看当前占用CPU或内存最多的5个进程
- 将 Win32 C/C++ 应用程序迁移到 POWER 上的 Linux,第 1 部分: 进程、线程和共享内存服务 (转载)
- svchost.exe 占用内存比较大或者占用CPU很大的解决办法
- 将 Win32 C/C++ 应用程序迁移到 POWER 上的 Linux,第 1 部分: 进程、线程和共享内存服务 (转)
- Linux TOP命令 按内存占用排序和按CPU占用排序
- Linux TOP命令 按内存占用排序和按CPU占用排序
- 对于c#软件或者服务程序 内存占用多的解决方案
- Linux(CentOS) 如何查看当前占用CPU或内存最多的K个进程