- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想象一下这个 Action :
public async Task<ActionResult> MyAction(){
var result = await MyMethodAsync();
return View(result);
}
MyMethodAsync()
执行,以便它可以用于服务其他 HTTP 请求。
MyMethodAsync()
?我猜它不是线程池中的另一个线程,因为这会破坏异步操作的目的。它只是一个在 HTTP 响应完成时创建、启动和销毁的全新线程吗?
最佳答案
不,它仍然来自线程池,并且不会破坏任何目的。
异步在阻塞操作期间变得很有值(value),例如访问磁盘或网络,任何不受 cpu 限制的东西(即,受 I/O(输入/输出)限制的操作)。
线程只返回到池中,这样它就不必等待阻塞操作完成就可以帮助服务另一个 HTTP 请求。
一旦阻塞操作完成,另一个工作线程被抓取 来自游泳池 .
这可以帮助抵消称为线程池饥饿的问题。每个线程池只启动这么多线程,并且启动更多线程是昂贵的。有时,Web 服务器可能会与许多等待阻塞操作完成的线程捆绑在一起,因此新请求必须等待新线程,这意味着它们必须等待其他人的阻塞操作。使用异步,等待阻塞操作的线程可以返回到池中,以便它可以服务其他(可能是 CPU 绑定(bind)的)请求。
阅读:http://msdn.microsoft.com/en-us/library/ee728598(VS.100).aspx
...然后阅读:http://blog.stephencleary.com/2013/11/there-is-no-thread.html
I understand that another thread is grabbed from the pool once the blocking operation is done, but what I don't know is exactly what thread executes the blocking operation itself.
关于asp.net-mvc - 工作线程从哪里来的异步 MVC 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26519595/
我是一名优秀的程序员,十分优秀!