Multithreading 分析同步异步请求的一般策略

Multithreading 分析同步异步请求的一般策略,multithreading,asynchronous,callback,profiling,Multithreading,Asynchronous,Callback,Profiling,我们有一个系统,可以在同一时间范围内发出1到N个异步请求(“foo”)。这些请求是在主线程以外的线程上启动的,所有这些请求不一定来自同一个线程 异步请求的回调都在一个特定的线程上处理,为了便于讨论,我们将其称为“bar”线程 “请求方”所做的一切对我们来说都是不透明的。我们不能进入那个图书馆 到目前为止,我们还使用了一个非常简单的分析器,它基本上调用markStart('measurement name')和markDone('measurement name')来计时请求。从我们启动foo请求

我们有一个系统,可以在同一时间范围内发出1到N个异步请求(“foo”)。这些请求是在主线程以外的线程上启动的,所有这些请求不一定来自同一个线程

异步请求的回调都在一个特定的线程上处理,为了便于讨论,我们将其称为“bar”线程

“请求方”所做的一切对我们来说都是不透明的。我们不能进入那个图书馆

到目前为止,我们还使用了一个非常简单的分析器,它基本上调用
markStart('measurement name')
markDone('measurement name')
来计时请求。从我们启动foo请求到bar处理foo请求,我越来越接近于必须分析各个foo请求

显然,我们现有的探查器无法工作,我需要介绍一种方法,将正确的
markDone()
回调与来自foo的相应
markStart()
回调相关联

如果我们的请求有某种形式的序列号返回作为响应,它将是直接的,但我们没有这些


是否有一种智能的、通用的方法可以将ID与每个请求关联起来,这种方法在线程之间是可见的,或者在这种情况下分析通常会以不同的方式处理(如果有的话)?

我不知道有任何分析程序对此有用。 这并不意味着它们不存在

我以前也遇到过这种问题。 我写了一本书,并在书中讨论了这一点。 基本上我提出了两种方法,一种在线程内工作,另一种跨线程工作。 你真的需要两者兼而有之,因为任何一方都会浪费不必要的时间

以下是一些扫描页面:


谢谢你,迈克。这太棒了。我一直在思考如何解决这个问题,这是一个非常有趣的整体观点。周末我会考虑一些好问题。