pan*_*ajt 1 performance cpu-usage cpu-speed
Q1.编写不消耗CPU但仍能获得出色性能的代码的最佳实践是什么?这个问题非常通用.我在这里寻求的是列出用于不同环境的不同实践?除了进程监视器/任务管理器之外的调试技巧
编辑:我不是在谈论IO绑定进程.我说的是CPU绑定过程.但是,在这里我不希望我的进程继续占用CPU.如果我有一台4核机器,并且如果我在一个过程中运行四个简单的循环,则CPU消耗量最多可达到400%,直到应用程序/进程运行.
我在这里寻求一些关于这个话题的经验,每个人都会遇到一些时间或其他.例如,一旦应用程序在Windows上占用CPU,我就会调试它,因为它不断循环搜索不存在的文件.
如何以两种不同的CPU绑定应用程序顺利运行(给出良好响应)的方式编写程序?
更新: 建议:
写好干净的代码,然后配置您的应用程序,然后进行优化.(感谢提示)
重写/重新设计/重构代码比分析和修复代码更容易.
使用分析器调试您的应用程序
对于长时间等待的线程,请勿使用自旋锁
算法选择
这些建议对初学者理解概念有很大帮助.
做尽可能少的工作.
由于您已编辑了原始问题,因此我将在此处添加更多想法以解决您所描述的具体情况.
假设您不知道进程阻塞的位置(因为您要求调试提示),您可以从暂停调试器开始,这将停止应用程序无论它在做什么,从那里您可以调查所有的当前位置线程并查看它们是否处于紧密循环中.
其次,任何体面的剖析器都可以轻松地帮助捕捉这样的情况 连接探查器并将应用程序运行到阻塞点,查看显着获得总运行时间百分比的调用.从那里你可以回来找到阻塞循环.
一旦找到问题,理想情况下需要重新考虑算法以完全避免这种情况.如果这不可能,那么在线程上引入sleep命令.这将允许其他线程进入CPU并以增加操作运行时为代价提高应用程序和OS整体的响应性.多核编程的技巧是确保所有线程在性能和对其他等待任务的考虑之间妥协.
在不知道特定语言或操作系统的情况下,我不能就问题提出建议,但我认为对于大多数成熟语言来说,有很好的解决方案.