rea*_*Pro 9 asp.net iis asp.net-mvc asynchronous task-parallel-library
我想知道为什么我应该在控制器上使用异步任务,当IIS已经为我处理并发时?
Ken*_*eth 15
asp.net中的异步/等待不是关于并发性,而是关于阻塞或不阻塞线程.
如果使用async/await,则在等待操作时释放线程.如果此操作受CPU约束,则没有任何好处(由于上下文切换,它甚至会稍微慢一些)
如果操作是IO绑定的(网络,磁盘,...),则意味着IIS可以处理更多并发请求,因为您没有阻止任何无效的线程.
Ste*_*ary 12
正如其他人所指出的那样,async允许请求线程在进行异步操作时返回线程池.使用同步处理程序,您的服务器将最终在I/O上阻塞线程,基本上没有重要的事情,但在被阻止时也无法用于其他请求.async只需释放这些线程,使它们始终有用.
所以,首先要注意的是问题" async 或线程池"是错误的问题.当您使用时async,您允许ASP.NET最大限度地利用现有的线程池.async采用ASP.NET中现有的(并行)并发性并添加(异步)并发性以实现更高的可伸缩性.
但问题仍然是"为什么"?原因有两个:async可以比(仅)线程池进一步扩展,并且async响应更快.正如在其他答案的评论中提到的,线程是非常重量级的对象,不必要地浪费; 异步操作的内存远小于线程使用的内存.第二个原因也很重要:当突然发出请求时,线程池(自身)只能以有限的速率扩展; async使线程池能够更有效地处理突发请求.
| 归档时间: |
|
| 查看次数: |
3148 次 |
| 最近记录: |