gpt4 book ai didi

c# - IIS 工作线程与 Web 应用程序线程

转载 作者:行者123 更新时间:2023-12-04 04:10:54 25 4
gpt4 key购买 nike

我正在维护一个需要重复运行一些后台线程的 ASP.NET Core Web 应用程序。我知道这不是一个好的设计,但目前我必须以最小的努力解决它的主要问题。现在我想知道我是否应该担心通过 Web 服务器处理用户的 http 请求?

问题很简单,但我找不到明确的答案:

像这样在应用程序中创建的线程之间有什么区别:

Task.Run(() => { // some parallel job })

和处理 http 请求的 IIS 工作线程?

它们是来自同一个线程池还是驻留在不同的池中?

最佳答案

根据 this都是一个池:“ASP.NET Core 已经在普通线程池线程上运行应用程序代码。”换句话说,服务于请求的线程与后台线程没有单独的最大值。

最大的区别是 IIS 知道它自己为传入请求创建的线程。 IIS 不知道您自己创建的任何线程。

当应用程序池被回收或 IIS 关闭时,它会一直等到所有请求都已完成处理 - 它会等到它为每个请求创建的线程已完成处理 - 然后它会终止进程。如果您创建了任何比请求还长的线程(例如,如果您创建了一个后台线程,然后将响应发送回客户端),IIS 不知道该线程仍在运行并且可能随时终止整个进程。

如果您在所有线程完成之前不返回响应,那么您就不会有那个特定的问题。

另一个问题是您可能会达到允许的最大线程数。然后会发生各种奇怪的性能问题。但这取决于您创建的线程数以及传入的 HTTP 请求数。

关于c# - IIS 工作线程与 Web 应用程序线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61756617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com