我正在进行一些实验,对它们进行计时并比较时间以找到最佳“算法”。出现的问题是并行运行任务是否会使实验的相对运行时间错误,以及我是否可以通过顺序运行它们获得更具代表性的结果。这是代码的(简化)版本:
public static void RunExperient(IEnumerable<Action> experiments)
{
Parallel.ForEach(experiments, experiment =>
{
var sw = Stopwatch.StartNew(); //line 1
experiment(); //line 2
sw.Stop(); //line 3
Console.WriteLine(@"Time was {0}", sw.ElapsedMilliseconds);
});
}
我的问题是关于“幕后”发生的事情:
当一个任务开始时,操作系统或框架是否有可能在其执行期间暂停任务并继续稍后使实验的运行时间完全错误?
通过按顺序运行实验,我会得到更具代表性的结果吗?