性能:异步与线程
本文关键字:线程 异步 性能 | 更新日期: 2023-09-27 18:37:02
我知道异步和线程是两个非常不同的东西,因为第一个用于开发异步行为,而另一个用于同步或并行函数。但是我刚才注意到的一件事是,当目标是在长时间运行的任务期间保持应用程序响应和活动时,当使用 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);
}
});
我只想知道看到异步具有更高的性能是否正常,因为我认为异步任务在后台进行相同的senario。对两者使用相同的延迟毫秒 (50):
Thread.Sleep(50) -> thread
await Task.Delay(50) -> Async
在性能测试应用程序中,我观察到异步上的 CPU 使用率大约减少了 5%,用于执行相同的操作。
从"保持应用程序响应"我的结论是你谈论一些Windows程序。
在这种情况下,async/await 将与程序的其余部分在同一个 UI 线程中运行。窗口调度程序将按顺序执行异步部分以及其余部分。(异步操作本身之后的继续代码将在 UI 线程上运行)
另一方面,backgorund worker(线程)将并行运行,并且可能在另一个内核上运行(现在)。
无论如何,CPU 使用率不会告诉您发生了什么。