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

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

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

  譬如:

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

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

  内存问题及解决方案:

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

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

  CPU高及解决方案:

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

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

linux c++应用程序内存高或者占用CPU高的解决方案_20161213的更多相关文章

  1. 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法,有人在暴力破解

    关于csrss.exe和winlogon.exe进程多.占用CPU高的解决办法 最近VPS的CPU一直处在100%左右,后台管理上去经常打不开,后来发现上远程都要好半天才反映过来,看到任务管理器有多个 ...

  2. TortoiseSVN status cache占用CPU高

    进程占用CPU高 每次从SVN上更新资源时,电脑都会卡死,直到资源更新完.当要Commit资源时,SVN也会卡死资源管理器,如下图所示: 解决占用CPU高的问题 1.禁用图标缓存 2.排除路径和包含路 ...

  3. 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法

    原地址 http://blog.sina.com.cn/s/blog_912e77480101nuif.html   最近VPS的CPU一直处在100%左右,后台管理上去经常打不开,后来发现上远程都要 ...

  4. 查看tomcat项目中,具体占用cpu高的线程。

    1.查看主进程占用cpu高: 此处主进程:27823 ~]# top top - :0: up days, :, 3 users, load average: 13.12, 13.31, 13.23 ...

  5. 查看JAVA占用CPU高的线程日志

    # . 查看主进程占用cpu高 top # java # . 按照线程占用cpu由高到低进行排查: -o THREAD,tid, # USER %CPU PRI SCNT WCHAN USER SYS ...

  6. 关于ESET占用CPU严重 的解决方案||ESET CPU 100%||用迅雷时ESET占用CPU(6月22日再次更新)

    关于ESET占用CPU严重 的解决方案 本文根据原帖有适量删改. ESET 的杀毒软件历来以占用资源少,CPU消耗少著称,可是很多朋友(特别是中国大陆的朋友)反应ESS & EAV 间歇性占用 ...

  7. Linux下C程序内存泄露检测

    在linux下些C语言程序,最大的问题就是没有一个好的编程IDE,当然想kdevelop等工具都相当的强大,但我还是习惯使用kdevelop工具,由于没有一个习惯的编程IDE,内存检测也就成了在lin ...

  8. 利用jstack命令定位占用cpu高的java线程及具体错误代码信息

    1.先用top查询某进程的线程CPU占用情况,定位到cpu占用高的进程pid 2.根据pid定位具体的线程top -p PID -H ,找出占用cpu最大的pid,此处占用cpu比较平均,我们随便选择 ...

  9. 记一次mogodb占用cpu高问题

    公司服务器上安装了contly,是一个开源的node.js项目,用于统计手机app使用情况,后端数据储存使用的mongodb,使用的时候经常发现mongodb占用cpu非常高,打到了210%的爆表值 ...

随机推荐

  1. ADO.net数据绑定

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  2. C#~异步编程再续~async异步方法与同步方法的并行

    返回目录 今天晚上没事写了个测试的代码,又看了看.net的并行编程,两个方法,一个是异步async修饰的,另一个是普通的方法,在控制台程序的Main方法里去调用这两个方法,会有什么结果呢? 首先我们看 ...

  3. php设置手机访问浏览器版apache配置

    我们开发项目的时候经常会开发到浏览器版本的网页,这样我们就经常需要用手机连接局域网以方便测试,那么怎么配置服务器文件呢. 1.首先关闭电脑的windows防火墙   右击我的网络/windows防火墙 ...

  4. 在Python应用中使用MongoDB

    Python是开发社区中用于许多不同类型应用的强大编程语言.很多人都知道它是可以处理几乎任何任务的灵活语言.因此,在Python应用中需要一个什么样的与语言本身一样灵活的数据库呢?那就是NoSQL,比 ...

  5. 从零开始学 Java - Spring 一主多从、多主多从 数据库配置

    待会苹果要开发布会 我写完这篇文章就准备去看发布会了,因为我买了好几包瓜子和啤酒.由于苹果的保密做的越来越差劲,该曝光的信息差不多全部曝光了,我们这种熬夜看发布会的只不过是让这些信息更加真实,或者说是 ...

  6. Lind.DDD.ExpressionExtensions动态构建表达式树,实现对数据集的权限控制

    回到目录 Lind.DDD框架里提出了对数据集的控制,某些权限的用户为某些表添加某些数据集的权限,具体实现是在一张表中存储用户ID,表名,检索字段,检索值和检索操作符,然后用户登陆后,通过自己权限来构 ...

  7. Combobox的使用

    第一次写博客,只是对自己在工作中遇到的问题进行一次总结回顾,为以后有同样的错误有一个参考: 由于最近空余时间很少,只是零零散散的把平时记录的笔记搬到博客园而已,博客中可能出现一些低级错误,希望互相学习 ...

  8. 学习Javascript闭包(Closure)

    闭包作用 1.让变量驻留在内存中 2.函数外部可以读取函数内部的私有变量 <!DOCTYPE html> <html lang="en"> <head ...

  9. html基础大全(经典)

    HTML教程 一.HTML基础(人) 1.基础概念: 1.1.自动闭合标签和闭合标签(如出错html编写时不会报错) 自闭合:<mete  /> 闭合:<table>文字< ...

  10. Mysql(Mariadb) 基础操作语句 (持续更新)

    基础SQL语句,记录以备查阅.(在HeiDiSql中执行) # 创建数据库 Create Database If Not Exists VerifyIdear Character Set UTF8; ...