首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一些常见的技术来分析基于协同机制的代码?

是否有一些常见的技术来分析基于协同机制的代码?
EN

Stack Overflow用户
提问于 2016-05-12 15:05:39
回答 1查看 360关注 0票数 0

很明显,如何可视化一个常规调用堆栈并计算内部和外部执行时间。然而,如果一个人已经处理过协同,调用堆栈可能看起来相当混乱。我的意思是,一条协同线可能不会将死刑交给它的父母,而是交给另一条协同机制(例如。小绿)。对于这样的场景,是否有一些常见的方法来进行一致的分析输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-12 21:27:24

想一想一个单一的例子,所有线程的堆栈在同一时间。

你需要知道的是-谁在等谁,为什么。通常,如果函数A在堆栈上高于B,则表示A在等待B返回,其原因是A希望B做一些事情。如果您查看整个堆栈,因为一个线程,您会得到一个链的原因,为什么这个特定的纳秒被花费在这个线程上。如果你在寻找速度,你需要的是一系列根本不需要的原因(因为有一个薄弱环节)。即使链以I/O结尾,这也有效。如果它是用户输入,那么它只是在等待用户。但是,如果它是输出、磁盘I/O或普通的旧CPU运行,您可能会做一些事情来减少它,并获得性能增益(如果您在2个或更多的示例上看到了相同的问题)。

如果线程A正在等待线程B,怎么办?然后,您在A的堆栈底部看到的是一个等待其他线程的函数。您需要找出哪个是线程B,并查看它的堆栈,因为它花费的时间越长,A所用的时间就越长。所以这是比较困难的,但你肯定不怕。

我在这里讨论的是手动分析,您在调试器中自己采集样本,并将您的全部注意力应用于每个示例。分析工具倾向于假设你很懒,只想要数字,如果没有从这些数字中跳出来,你会很高兴,因为你什么也没有发现。事实上,如果一些愚蠢的不必要的活动花费了30%的时间,那么平均你需要看两次的样本数是2/0.3 = 6.67样本(不是一个很大的数字),你很可能会看到它和https://stackoverflow.com/a/25870103/23771。那是https://stackoverflow.com/a/378024/23771

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

https://stackoverflow.com/questions/37190841

复制
相关文章

相似问题

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