性能:异步vs线程

时间:2015-01-11 15:17:46

标签: c# multithreading asynchronous

我知道Async和线程是两个非常不同的东西,因为第一个用于开发异步行为,而另一个用于同步或并行功能。但我刚才注意到的一件事是,当目标是在长时间运行的任务中保持应用程序的响应和活动时,使用Async和Await时,使用这样的线程执行旧方式的CPU使用率相当低:

Thread Task1 = new Thread(()=>{

      // Do Something 
});

Thread Task2 = new Thread(()=>{
      Task1.Start();
      while(true){
         if (!Task1.IsAlive){
             // Do something 
             break;
         }
         Thread.Sleep(50);
      }
});

我只想知道Async是否具有更高性能是否正常,因为我认为同样的Senario正在后台进行异步任务。对两者使用相同的延迟毫秒(50):

Thread.Sleep(50) -> thread
await Task.Delay(50) -> Async

在性能测试应用程序上,我观察到Async上执行相同操作的CPU使用率降低了5%。

1 个答案:

答案 0 :(得分:0)

从“保持应用程序响应”我得出结论,你谈到了一些Windows程序。

在这种情况下,async / await将在与程序其余部分相同的UI线程中运行。 Windows调度程序将执行异步部分以及其余顺序。 (异步操作本身之后的延续代码将在UI线程上运行)

另一方面,backgorund工作者(线程)将并行并且可能在另一个核心(现在)上运行。

无论如何,CPU使用率告诉你没有关于最新情况。