我知道这些术语在性能实现/优化的上下文中使用。
最近一直在做这方面的工作,并尝试搜索;但没有得到任何示例,这些示例清楚地阐述/描述了这些概念,并在现实世界的开发场景中实现了这些问题/概念。
有人可以彻底解释这些术语,示例场景,以及这些概念和术语可能使用的地方。
谢谢。
发布于 2011-10-27 22:02:22
“样板”与性能无关:它只是指定义应用程序或使用某个框架所需的标准代码。它的代码在每个应用程序中都可能是相同的。
另一方面,“热点”意味着代码的一部分被多次执行,因此其性能对整体应用程序性能非常重要。通常,热点是通过实际的分析来识别的:如果它被多次执行,那么它就不是热点,但它对性能的影响是微不足道的。
发布于 2011-10-27 22:09:41
Boilerplate code
“热代码”是可伸缩的、编写良好的代码。
“热点”是一个非常活跃的区域。它们是热点,因为它们是频繁执行的代码。
发布于 2011-10-28 07:20:23
“热点”的一个定义是程序计数器花费大量时间的代码区域。一个相关的术语是“瓶颈”,虽然定义不明确,但它通常指的是本地化到函数、例程或方法的代码,这会导致花费比必要更高的时间。
这两个术语都非常具有误导性,因为其中有一个巨大的不成文的假设。假设没有机会加速一个不是热点或瓶颈的程序。加速机会可能比这更分散,如果它们没有被发现和修复,它们就会成为性能的限制者。
让我举个例子。最近,当我在一个大约有300行代码的C++程序上工作时,我取了10个stackshots,因为我想看看如何提高它的速度。其中四个堆叠镜头看起来像这样:
CTypedPtrArray<CPtrArray,COperation *>::operator[]() line 1555 + 23 bytes
TcProcess() line 246 + 14 bytes ---> COperation* pOp = oplist[i];
CMhAck::Handler() line 165
doit() line 297 + 12 bytes
main() line 318
CTypedPtrArray<CPtrArray,CJob *>::operator[]() line 1555 + 23 bytes
SchProcess() line 212 + 14 bytes ---> pJob = joblist[i];
COpAck::Handler() line 145
doit() line 297 + 12 bytes
main() line 318
CTypedPtrArray<CPtrArray,CTask *>::operator[]() line 1555 + 23 bytes
TcProcess() line 249 + 18 bytes ---> pTask = pOp->tasks[pOp->iCurTask];
CMhAck::Handler() line 165
doit() line 297 + 12 bytes
main() line 318
CTypedPtrArray<CPtrArray,CTask *>::operator[]() line 1555 + 23 bytes
COperation::~COperation() line 57 + 15 bytes ---> CTask* p = tasks[i];
COperation::`scalar deleting destructor'() + 37 bytes
TcProcess() line 259 + 28 bytes
CTskAck::Handler() line 193
doit() line 297 + 12 bytes
main() line 318整个程序总共花了20秒。这些堆栈样本告诉我,大约40%的时间,即8秒,花费在数组类的索引操作符上。这告诉我,如果我可以更直接地进行索引,而不是通过函数调用,我可以将运行时间从20秒减少到12秒。加速比将为20/12 = 1.67,或约67%的加速比。(注意:当涉及到时机时,我不会对“确切”一词大加赞赏。我想要做的是找出问题所在。)
现在,人们可能很容易不同意这种修复问题的方法,但您可以看到我是如何检测到问题的,对吧?
好的,那么“热点”在哪里,“瓶颈”在哪里?显然,在索引操作符函数中有一个热点,但这是问题所在吗?(实际上并非如此,因为它有三个不同的函数。)这是否意味着我应该试着让这个例程变得更快?我甚至不拥有它!
是否存在某种“慢程序”形式的瓶颈?不是的!没有特别慢的例程,也没有“糟糕的算法”。
我所做的就是描述它在做什么(“它在某些例程中进行索引”)。其中该描述在很大一部分时间内适用。
对于这些事情,我能想到的最好的术语是“时间消耗”,因为它花了很大一部分时间做实际上不需要做的事情。
https://stackoverflow.com/questions/7916985
复制相似问题