2008-10-26 29 views
5

Joe Duffy在MSDN文章“Using concurrency for scalability”中声明创建线程的成本大约为200,000个周期,并且销毁成本大约为100,000个周期。测量线程费用

当我尝试创建一个新线程来执行一些计算时,我想确保计算本身比200,000个周期更昂贵。

我该如何测量CPU周期?我认为这比测量执行时间更有趣。

+0

你应该把使用线程的代价加上指令缓存刷新的成本。 – Hugo 2008-10-27 16:48:22

回答

2

您可以使用像英特尔的Vtune这样的采样分析器来测量正在测量的系统上的最小干扰量,从而计算消耗了多少CPU周期。

使用线程时,目标是避免不必要的产生新线程。看看使用thread pool。这将允许您异步运行工作项目,但不必为每个项目生成一个新线程。

+0

mod + 1为线程池的建议! – 2008-10-27 01:11:20

1

我会检查出System.Diagnostic命名空间。它跟踪内存和CPU使用情况有很多。

0

我问了一个密切相关的问题,几天以前,尚未没有找到一种方法来测量代码的实际CPU循环使用: Limiting assembly execution number of cpu cycles

在你的情况,你能不能运行分析的计算并查看单次计算需要多少时间,并将其与产生执行计算的线程的总计时间进行比较,然后再关闭线程。

0

这是计算CPU周期的问题。不同的CPU采用不同的周期数来实现相同的指令。所以它不是一个可靠的公制IMO。我认为你应该测量的是执行的时间,而在.NET中,你使用System.Environment.TickCount来完成这个任务。我认为这是你得到的最好的...