【问题标题】:Is the IIS request processing thread pool the same as the TPL thread pool?IIS请求处理线程池和TPL线程池一样吗?
【发布时间】:2018-07-19 14:30:27
【问题描述】:

我知道任务并行库 (TPL) 使用线程池来运行任务。
我还读到 IIS 使用“线程池”来处理传入的 Http 请求。
我的问题是:这两个是指同一个线程池吗??

假设我有这个控制器方法:

[HttpGet]
public async void GetAsyncTest()
{
    await Task.Run(() => {//Do some heavy CPU work here});
}

是否会使用与请求线程相同的线程池中的线程来处理任务?

【问题讨论】:

  • 推荐的方法是不要在你的应用程序中开始这样的工作。使用专门的服务来完成长期运行的工作。
  • 听起来我误导了你。更多细节可以在msdn.microsoft.com/en-ca/library/ee817661.aspx和docs.microsoft.com/en-us/dotnet/standard/threading/…找到,他们进一步讨论了线程池,应该是一个单独的。
  • 使用线程池中的线程处理请求。 Task.Run 弊大于利,因为它将一个线程池线程交换为另一个导致不必要的线程切换。

标签: asp.net iis async-await task-parallel-library


【解决方案1】:

简短的回答是是。

这就是为什么为 CPU-heavy 操作启动任务没有意义的原因:它将使用与其他传入请求相同的池中的线程,因此您的应用程序将不会能够像以前一样处理更多请求。这超出了在 Web 应用程序中使事物异步的目的:它是关于 释放线程 以供其他请求使用,而外部 IO 繁重的操作(db 请求或 http对另一个服务的请求)被执行。

【讨论】:

  • 感谢您的回答@Miklos。是否有任何支持这一点的微软文档?如果是这样,你会分享链接吗?
  • 我找不到关于这个特定主题的官方 msdn 文章,只有类似的 SO 和论坛主题(双关语:)),比如这个:stackoverflow.com/questions/25239722/… 或这个:@987654322 @
猜你喜欢
  • 2013-03-07
  • 2014-11-16
  • 2013-06-01
  • 2011-11-03
  • 2015-03-27
  • 2013-02-08
  • 1970-01-01
  • 2010-12-15
  • 2021-08-28
相关资源
最近更新 更多