首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是样板代码、热点代码和热点?

什么是样板代码、热点代码和热点?
EN

Stack Overflow用户
提问于 2011-10-27 21:58:34
回答 5查看 14.4K关注 0票数 9

我知道这些术语在性能实现/优化的上下文中使用。

最近一直在做这方面的工作,并尝试搜索;但没有得到任何示例,这些示例清楚地阐述/描述了这些概念,并在现实世界的开发场景中实现了这些问题/概念。

有人可以彻底解释这些术语,示例场景,以及这些概念和术语可能使用的地方。

谢谢。

EN

回答 5

Stack Overflow用户

发布于 2011-10-27 22:02:22

“样板”与性能无关:它只是指定义应用程序或使用某个框架所需的标准代码。它的代码在每个应用程序中都可能是相同的。

另一方面,“热点”意味着代码的一部分被多次执行,因此其性能对整体应用程序性能非常重要。通常,热点是通过实际的分析来识别的:如果它被多次执行,那么它就不是热点,但它对性能的影响是微不足道的。

票数 15
EN

Stack Overflow用户

发布于 2011-10-27 22:09:41

Boilerplate code

“热代码”是可伸缩的、编写良好的代码。

“热点”是一个非常活跃的区域。它们是热点,因为它们是频繁执行的代码。

票数 4
EN

Stack Overflow用户

发布于 2011-10-28 07:20:23

“热点”的一个定义是程序计数器花费大量时间的代码区域。一个相关的术语是“瓶颈”,虽然定义不明确,但它通常指的是本地化到函数、例程或方法的代码,这会导致花费比必要更高的时间。

这两个术语都非常具有误导性,因为其中有一个巨大的不成文的假设。假设没有机会加速一个不是热点或瓶颈的程序。加速机会可能比这更分散,如果它们没有被发现和修复,它们就会成为性能的限制者。

让我举个例子。最近,当我在一个大约有300行代码的C++程序上工作时,我取了10个stackshots,因为我想看看如何提高它的速度。其中四个堆叠镜头看起来像这样:

代码语言:javascript
复制
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%的加速比。(注意:当涉及到时机时,我不会对“确切”一词大加赞赏。我想要做的是找出问题所在。)

现在,人们可能很容易不同意这种修复问题的方法,但您可以看到我是如何检测到问题的,对吧?

好的,那么“热点”在哪里,“瓶颈”在哪里?显然,在索引操作符函数中有一个热点,但这是问题所在吗?(实际上并非如此,因为它有三个不同的函数。)这是否意味着我应该试着让这个例程变得更快?我甚至不拥有它!

是否存在某种“慢程序”形式的瓶颈?不是的!没有特别慢的例程,也没有“糟糕的算法”。

我所做的就是描述它在做什么(“它在某些例程中进行索引”)。其中该描述在很大一部分时间内适用。

对于这些事情,我能想到的最好的术语是“时间消耗”,因为它花了很大一部分时间做实际上不需要做的事情。

More about terminology and popular misconceptions.

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

https://stackoverflow.com/questions/7916985

复制
相关文章

相似问题

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