首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CPU利用率

CPU利用率
EN

Stack Overflow用户
提问于 2009-05-22 13:36:26
回答 9查看 1.6K关注 0票数 1

Q1。编写不消耗CPU但仍能获得很好性能的代码的最佳实践是什么?这个问题非常笼统。我在这里所寻求的是列出不同环境下使用的不同实践?除进程监视器/任务管理器之外的调试技巧

编辑:我说的不是IO绑定的进程。我指的是CPU绑定进程。但是,在这里,我不希望我的进程继续占用CPU。如果我有一个4台核心机器,如果我在一个进程中运行四个简单的循环,那么在应用程序/进程运行之前,CPU消耗就会激增到400%。

我在这里寻求一些经验,在这个问题上,每个人都会面对一些时间或其他时间。例如,我调试了一个应用程序占用了Windows上的CPU,因为它一直在循环以搜索一个不存在的文件。

如何编写程序,使两个不同的CPU绑定应用程序能够顺利运行(给出一个好的响应)?

更新:建议:

  1. 编写干净的代码,然后分析应用程序,然后进行优化。(谢谢泰德的建议)
  2. 与分析和修复代码相比,重写/重新设计/重构代码更容易。
  3. 使用分析器调试应用程序
  4. 不要对等待时间较长的线程使用自旋锁
  5. 算法选择

这些建议对初学者理解这些概念有很大帮助。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-05-22 14:24:06

首先,写好干净的代码。以最简单的方式做事。然后,重复执行以下操作,直到您对程序的速度感到满意为止:

  1. 分析它的执行情况。
  2. 找出它花的时间最多的部分。
  3. 加速这些部件。

不要让(而不是)落入以优化的名义预先扭曲您的代码的陷阱。

记住阿姆杜尔定律。你不会得到明显的改善,加快一些已经只消耗了你程序1%时间的东西。通过加快程序的大部分时间来完成优化工作,你就能得到最好的结果。

票数 6
EN

Stack Overflow用户

发布于 2009-05-22 13:38:32

  • 虔诚地使用分析器。在寻找瓶颈时,不要依赖常识。
  • 学习大O表示法,记住一般算法的大O。
  • 不惜一切代价避免繁忙的等待循环。
  • 在嵌入式的情况下,学习如何使代码适合于代码缓存,这可以使10倍的加速比有时在紧密的循环。
  • 在进行高层分层开发时,了解如何有效地缓存数据(例如,尽量减少DB语句的数量)。
票数 6
EN

Stack Overflow用户

发布于 2009-05-22 13:41:39

尽量少做工作。

既然你已经编辑了你的原始问题,我将在这里添加一些更多的想法,以解决你所描述的具体情况。

假设您不知道进程阻塞在哪里(因为您要求调试提示),您可以通过暂停调试器开始,这将停止应用程序无论它正在做什么,从那里您可以调查所有线程的当前位置,并查看其中是否有一个紧循环。

第二,任何体面的分析器都能很容易地帮助捕捉到这样的情况。附加分析器并将应用程序运行到阻塞点,查看在运行时总数中获得更大百分比的调用。从那里,你可以回到你的方式找到阻塞循环。

一旦你找到你的问题,理想的情况下,重新考虑算法,完全避免这种情况。如果这是不可能的,那么在线程上引入睡眠命令。这将允许其他线程进入CPU,并以增加操作运行时为代价,提高应用程序和整个操作系统的响应能力。多核编程的诀窍是确保所有线程在性能和对其他等待任务的考虑之间妥协。

如果不知道您的目标语言或操作系统,我就无法就问题的调试器/分析器组合提出建议,但我可以想象,对于大多数成熟的语言,都有很好的解决方案。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/897886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档