【发布时间】:2016-11-15 10:08:20
【问题描述】:
我看了这个视频:https://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287。所以我尝试在控制器中实现异步/等待的使用。所以这基本上就是我所做的:
public class HomeController : Controller
{
private static WebClient _webClient = new WebClient();
public async Task<ActionResult> IndexAsync()
{
var data = await _webClient.DownloadStringTaskAsync("http://stackoverflow.com/");
return View("Index", (object)data);
}
public ActionResult Index()
{
var data = _webClient.DownloadString("http://stackoverflow.com/");
return View("Index", (object)data);
}
}
然后我使用 Apache Benchmark 并做了以下两个测试:
ab -n 100 -c 100 http://localhost:53446/Home/index
和
ab -n 100 -c 100 http://localhost:53446/Home/indexasync
我得到了完全相同的性能(我有 8 个 CPU 内核)。这是为什么呢?
【问题讨论】:
-
您期待什么样的性能提升?
-
你没有同时运行多个异步操作,所以我预计不会有任何加速。
-
对于单个请求,您更有可能看到性能下降。异步通过允许处理更多并发请求来减轻负载。
-
-c 参数意味着 100 个并发请求,-n 是请求计数,所以基本上我向我的应用程序发送 100 个并发请求,它将向 SO 执行 100 个并发请求。
-
@goenning:不正确。异步!=并行处理。您可以使用
Task.WhenAll并行运行它们,但如果您只是等待每一行,它们将串行运行。