簡體   English   中英

IIS 工作線程與 web 應用程序線程

[英]IIS worker thread vs web application thread

我正在維護一個需要重復運行一些后台線程的ASP.NET Core web 應用程序。 我知道這不是一個好的設計,但目前我必須以最小的努力解決它的主要問題。 現在我想知道我是否應該擔心 web 服務器處理用戶 http 請求?

問題很簡單,但我找不到任何明確的答案:

像這樣在應用程序中創建的線程有什么區別:

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

和處理 http 請求的 IIS 的工作線程?

它們是來自同一個線程池還是位於不同的池中?

據此,它是一個池:“ASP.NET Core 已經在普通線程池線程上運行應用程序代碼。” 換句話說,服務請求的線程與后台線程沒有單獨的最大值。

最大的區別是 IIS 知道它自己為傳入請求創建的線程。 IIS 不知道您自己創建的任何線程。

當應用程序池被回收,或者 IIS 被關閉時,它會等待所有請求完成處理——它會等待它為每個請求創建的線程完成處理——然后它會終止進程。 如果您創建的任何線程超過了請求(例如,如果您創建一個后台線程,然后將響應發送回客戶端)IIS 不知道該線程仍在運行並且可能隨時終止整個進程。

如果您在所有線程都完成之前不返回響應,那么您將不會遇到該特定問題。

另一個問題是您可能會達到允許的最大線程數。 然后會發生各種奇怪的性能問題。 但這取決於您正在創建多少線程以及有多少 HTTP 請求進入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM