CPU利用率

pan*_*ajt 1 performance cpu-usage cpu-speed

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

编辑:我不是在谈论IO绑定进程.我说的是CPU绑定过程.但是,在这里我不希望我的进程继续占用CPU.如果我有一台4核机器,并且如果我在一个过程中运行四个简单的循环,则CPU消耗量最多可达到400%,直到应用程序/进程运行.

我在这里寻求一些关于这个话题的经验,每个人都会遇到一些时间或其他.例如,一旦应用程序在Windows上占用CPU,我就会调试它,因为它不断循环搜索不存在的文件.

如何以两种不同的CPU绑定应用程序顺利运行(给出良好响应)的方式编写程序?

更新: 建议:

  1. 写好干净的代码,然后配置您的应用程序,然后进行优化.(感谢提示)

  2. 重写/重新设计/重构代码比分析和修复代码更容易.

  3. 使用分析器调试您的应用程序

  4. 对于长时间等待的线程,请勿使用自旋锁

  5. 算法选择

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

ala*_*mar 6

  • 虔诚地使用探查器.在寻找瓶颈时不要依赖常识.
  • 学习big-O表示法,记住常用算法的大O.
  • 不惜一切代价避免繁忙的等待循环.
  • 在嵌入式的情况下,学习如何使代码适合代码缓存,有时可以在紧密循环上实现十倍的加速.
  • 在进行高级分层开发时,学习如何有效地缓存数据(例如,最小化DB语句的数量).


Mar*_*ris 6

做尽可能少的工作.


由于您已编辑了原始问题,因此我将在此处添加更多想法以解决您所描述的具体情况.

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

其次,任何体面的剖析器都可以轻松地帮助捕捉这样的情况 连接探查器并将应用程序运行到阻塞点,查看显着获得总运行时间百分比的调用.从那里你可以回来找到阻塞循环.

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

在不知道特定语言或操作系统的情况下,我不能就问题提出建议,但我认为对于大多数成熟语言来说,有很好的解决方案.


T.E*_*.D. 6

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

  1. 描述其执行情况.
  2. 找到花费最多时间的部分.
  3. 加快这些部分.

千万不能落入委曲你的代码前面的优化名的陷阱.

记住阿姆达尔定律.通过加速已经消耗了程序时间的1%的东西,你不会得到显着的改进.通过加快程序花费大部分时间所花费的部分,您可以获得最佳效果.