0

我讀過在ASP.NET Web應用程序中使用Task.Run是一個壞主意,因爲它使用線程池中的另一個線程,因此阻止使用此特定線程來提供請求。Parallel.ForEach是否使用ASP.NET線程池中的線程?

與Parallel.ForEach不一樣的情況嗎?它不會使用線程池中的多個線程,從而阻止這些特定線程用於提供請求嗎?

+0

'Task.Run'不好,'Parallel.ForEach'不好。 Task.Run將使用另一個線程而不提供任何好處。 Parallel.ForEach將以其他請求的(可能)開銷更快地完成。這可能是也可能不是問題 –

回答

3

與Parallel.ForEach不是同一個問題嗎?它不會使用線程池中的多個線程,從而阻止這些特定線程用於提供請求嗎?

是的,它會的。這意味着您將通過請求使用像這樣的多個請求來降低服務器的總吞吐量。 個別請求會完成得更快,但它會以其他請求爲代價更快完成

這也假設您的機器處於高負載狀態。如果線程池中沒有足夠高的負載,那麼它可以爲該請求專門提供更多的資源,而不會妨礙其他請求被服務的能力,並且爲該請求專門提供更多的資源可能會加速該請求。

+0

謝謝Servy,你證實了我的想法。 – aixki

+0

有人可能會說'Task.Run'糟糕,因爲它會使用另一個線程而沒有任何速度優勢。儘管如此,Parallel.ForEach將會更快完成。對其他請求的影響可能會也可能不會成爲問題 –

+0

@PanagiotisKanavos那麼您可以使用'Task.Run'來進行並行操作。但是,是的,如果你*沒有*並行性,並且只是使用多個線程來完成順序工作,那麼你們都會使用更多的資源,甚至不會加速這個請求。 – Servy

相關問題