我知道这些术语用于表现成就。这一天,我正在研究这个问题,并试图从互联网上了解这些,但没有得到任何明确表达这些概念的例子,以及现实世界发展情景中存在的这些问题/概念。有人可以彻底解释这些术语,示例场景,以及可能使用这些概念和术语的位置。
感谢。
答案 0 :(得分:15)
“Boilerplate”与性能无关:它只是指定义应用程序或使用某个框架所需的标准代码。它的代码在每个应用程序中可能都是相同的。
另一方面,“热点”是指执行多次的代码的一部分,因此其性能对整体应用程序性能很重要。通常情况下,一个热点是通过实际分析来识别的:如果它被执行多次,它不是一个热点,但它是如此微不足道,以至于它对性能的影响很小。
答案 1 :(得分:4)
答案 2 :(得分:3)
“热点”的一个定义是程序计数器花费大部分时间的代码区域。 相关术语是“瓶颈”,虽然定义不明确,但通常是指本地化为函数,例程或方法的代码,这会导致花费更多的时间用于必要的时间。
这两个术语都非常具有误导性,因为存在巨大的不成文假设。 假设没有机会加速不是热点或瓶颈的程序。 加速机会可能比这更加分散,如果找不到并修复它们,它们就会成为性能限制器。
让我举个例子。 最近,在处理大约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%的加速。 (注意:在时间方面,我没有提供关于“确切”的声音。我想做的是找到问题。)
现在有人可能很容易不同意修复问题的方法,但是你可以看到我是如何检测问题是什么,对吗?
好的,那么“热点”在哪里,哪里是“瓶颈”? 显然,索引操作符函数中存在一个热点,但问题出在哪里? (实际上甚至不是这样,因为它有三种不同的功能。) 这是否意味着我应该尝试更快地完成这个程序? 我甚至不拥有它!
是否存在某种“慢速常规”形式的瓶颈? 没有! 没有特别的例程是缓慢的,或者是“糟糕的算法”。
我所做的是做一个描述它正在做什么(“它在某些例程中索引。”),其中该描述适用于大部分时间。
我能为这些事情提出的最好的术语是“时间流失”,因为它花费了大量时间来完成那些真正必须完成的事情。
答案 3 :(得分:0)
答案 4 :(得分:0)
我的假设是,您已经对“样板”一词有了足够的定义。我可能希望借助示例来支持您的一切。 从Java的背景开始,最近才转到Scala,您意识到在Java中,您不能编写没有分号(;)的语句。此外,为可能正在生产中运行的程序编写数千条语句并不少见。您的猜测与我的猜测一样好,最终您编写了许多重复的低影响代码,但恰好是Java编译器所要求的代码。从减少编写样板代码的需要的意义上讲,Scala是一种简洁的语言。您不必在Scala中编写分号。希望这足够简单