测量线程开销

5
Joe Duffy在MSDN文章“使用并发实现可伸缩性”中指出,创建一个线程的成本大约为200,000个周期,销毁的成本约为100,000个周期。
当我尝试创建一个新线程来执行一些计算时,我想确保计算本身比200,000个周期更昂贵。
我如何测量CPU周期?我认为这比测量执行时间更有趣。

你应该将指令缓存刷新的成本加入到使用线程的成本中。 - Hugo
4个回答

2
您可以使用采样分析器(如英特尔的 Vtune)来获取在最小干扰系统的情况下消耗了多少 CPU 周期的度量。
然而,当使用线程时,目标是避免不必要地生成新线程。请考虑使用线程池。这将使您能够异步运行工作项,但无需为每个项生成新线程。

线程池只是对现有的线程进行池化;如果一个线程还没有被创建,那么创建成本就跟我不使用任何线程池时一样高。 - Michael Damatov
是的,如果您自己创建线程或使用线程池创建线程,其成本是相同的。但线程池通过保留一定数量的空闲线程来避免不必要的创建,有助于避免这种情况。如果您的工作项足够小,希望避免创建成本,则线程池似乎非常适合。 - Rob Walker

1
我会查看 System.Diagnostic 命名空间。它有很多关于跟踪内存和 CPU 使用情况的内容。

0

我几天前问了一个相关的问题,但还没有找到一种测量代码实际CPU周期使用情况的方法: 限制汇编执行CPU周期数

在你的情况下,你不能运行一次计算的分析,看看单个计算需要多长时间,然后将其与生成执行计算的线程的总时间进行比较,然后杀死线程吗?


0

计算 CPU 循环的问题在于不同的 CPU 执行相同指令所需的循环数是不同的,因此这并不是一个可靠的度量标准。我认为你应该测量的是执行时间,在 .NET 中,你可以使用 System.Environment.TickCount 来实现这一点。我认为这是你最好的选择...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接