gpt4 book ai didi

c++ - 分析多线程代码,采样如何工作

转载 作者:行者123 更新时间:2023-11-28 02:02:53 28 4
gpt4 key购买 nike

我正在使用 Visual Studio 分析我的多线程 C++ 应用程序。根据我对采样方法的了解,我了解到它会以指定的时间间隔查看处理器以查看正在执行的函数。

我很好奇它是如何处理多线程代码的。很有可能在不同内核的不同线程上同时执行 2 个或更多函数。在那种情况下,采样方法是否会为这两个函数递增计数器?我相信这就是实际发生的事情。

这实际上使得很难从分析报告中得出见解。收集样本数量最多的函数如果在工作线程上执行,则可能在不同的核心(与主线程不同)上执行,并且可能根本不会影响应用程序性能。但是,如果它切换出主线程来执行它的工作,那么它应该会对性能产生明显的影响。

是否有更好的方法来分析多线程代码?

最佳答案

在对函数执行进行采样时,分析器通常会单独对每个软件线程进行采样。所以,如果你有三个线程,分别执行 CPU 密集型 foo()、bar() 和 baz() 函数,采样频率为 100Hz,分析 session 的持续时间为 1s,你将在每个线程中获得 100 个样本的功能。

一个体面的分析器通常还会为您提供一种通过给定线程过滤数据的方法,以便您可以单独查看哪个线程上存在哪些热点。例如,如果主线程是使用您使用的框架完成 UI 渲染的地方,则主线程上发生的事情可能会很重要。

弄清楚在后台线程中完成的计算如何影响应用程序的响应能力本身就是一个广泛的话题,而且通常是特定于应用程序的。一些模式:

  • 寻找主线程被阻塞的地方。它可能会阻塞等待后台计算的结果。
  • 查看主线程是否有任何点因为没有现成可用的数据而不得不跳过某些操作。这在 UI/渲染处理中特别常见——如果在需要渲染帧时数据还没有准备好,代码就没有更好的办法了,因为跳过渲染帧会导致 UI 中用户可见的卡顿。

希望这对您有所帮助。

关于c++ - 分析多线程代码,采样如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38658846/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com