如何在.Net中模拟多个任务的同时执行?

时间:2013-07-17 17:25:32

标签: .net multithreading task-parallel-library

我想同时运行几项任务。为了清楚起见,我希望它们是同步的,而不仅仅是并行的 - 在任何时候,我都希望每个任务在一定的容差范围内消耗相同数量的CPU周期。如何在.Net中做得最好?

1 个答案:

答案 0 :(得分:1)

有两种衡量方法,Wall Clock timeCPU time。大多数人可能会告诉您使用Stopwatch来衡量效果,但这可能是您想要的数字,也可能不是。

如果您关心的是实时执行所需的时间,请使用秒表,如果您想知道线程本身运行了多长时间,可以使用Native API调用GetThreadTimes来完成。这是一篇使用它的文章on CodeProject。请注意,您将无法使用TPL,您将需要使用真正的Threads作为TPL它回收线程,因此时间将不是任务的实际执行时间。

第二个选项是使用QueryThreadCycleTime。这不会给你时间,但它会给你当前线程执行的周期数,你可以在开始时做一个,在结束时做一个并减去这两个数。请再次注意Task重用线程,以便除非您使用完整的线程,否则数字可能是也可能不可靠。

请注意,由于许多处理器(尤其是移动处理器)不能以固定速度运行,因此不能直接转换cycles->seconds,因此没有常数可以乘以得到经过的时间时间以秒为单位。但是,如果您使用的处理器不会改变其速度,那么从周期中获得挂钟时间将是一个简单的数学问题。