Q1。编写不消耗CPU但仍能获得很好性能的代码的最佳实践是什么?这个问题非常笼统。我在这里所寻求的是列出不同环境下使用的不同实践?除进程监视器/任务管理器之外的调试技巧
编辑:我说的不是IO绑定的进程。我指的是CPU绑定进程。但是,在这里,我不希望我的进程继续占用CPU。如果我有一个4台核心机器,如果我在一个进程中运行四个简单的循环,那么在应用程序/进程运行之前,CPU消耗就会激增到400%。
我在这里寻求一些经验,在这个问题上,每个人都会面对一些时间或其他时间。例如,我调试了一个应用程序占用了Windows上的CPU,因为它一直在循环以搜索一个不存在的文件。
如何编写程序,使两个不同的CPU绑定应用程序能够顺利运行(给出一个好的响应)?
更新:建议:
这些建议对初学者理解这些概念有很大帮助。
发布于 2009-05-22 14:24:06
首先,写好干净的代码。以最简单的方式做事。然后,重复执行以下操作,直到您对程序的速度感到满意为止:
不要让(而不是)落入以优化的名义预先扭曲您的代码的陷阱。
记住阿姆杜尔定律。你不会得到明显的改善,加快一些已经只消耗了你程序1%时间的东西。通过加快程序的大部分时间来完成优化工作,你就能得到最好的结果。
发布于 2009-05-22 13:38:32
发布于 2009-05-22 13:41:39
尽量少做工作。
既然你已经编辑了你的原始问题,我将在这里添加一些更多的想法,以解决你所描述的具体情况。
假设您不知道进程阻塞在哪里(因为您要求调试提示),您可以通过暂停调试器开始,这将停止应用程序无论它正在做什么,从那里您可以调查所有线程的当前位置,并查看其中是否有一个紧循环。
第二,任何体面的分析器都能很容易地帮助捕捉到这样的情况。附加分析器并将应用程序运行到阻塞点,查看在运行时总数中获得更大百分比的调用。从那里,你可以回到你的方式找到阻塞循环。
一旦你找到你的问题,理想的情况下,重新考虑算法,完全避免这种情况。如果这是不可能的,那么在线程上引入睡眠命令。这将允许其他线程进入CPU,并以增加操作运行时为代价,提高应用程序和整个操作系统的响应能力。多核编程的诀窍是确保所有线程在性能和对其他等待任务的考虑之间妥协。
如果不知道您的目标语言或操作系统,我就无法就问题的调试器/分析器组合提出建议,但我可以想象,对于大多数成熟的语言,都有很好的解决方案。
https://stackoverflow.com/questions/897886
复制相似问题