2010-01-24 74 views
2

可能重複:
Maximum number of threads in a .NET app?.NET進程中可以存在的線程數是否有嚴格的限制?

是否有我們可以在.NET應用程序創建的線程數量限制嗎?

我假設可以創建的線程數量受限於可用內存量,因爲線程堆棧需要分配。如果我錯了,請糾正我。是否有其他因素限制了線程的數量?或者,線程的數量是否限於特定的數量?

如果我知道機器規格,我該如何(粗略地)計算出可以在機器上創建的最大線程數?

+0

注:我問這是因爲我正在調查一個應用程序掛起涉及很多線程。我不打算嘗試創建最大數量的線程。 :-) – driis 2010-01-24 14:03:18

+2

聽起來像一場噩夢維護場景。沒有太多的問題比在其他人的大量(可能不必要的)多線程代碼中調試併發問題更困難。 – spender 2010-01-24 14:08:46

+0

這是[.NET應用程序中的最大線程數?]的副本(http://stackoverflow.com/questions/145312/maximum-number-of-threads-in-a-net-app)。 – Thorsten79 2010-01-24 14:05:02

回答

3

與往常一樣,Raymond Chen在his blog上有答案。請注意,他的測試似乎是使用非託管代碼運行的。我的猜測是,.NET框架中沒有任何內容會實際限制每個進程的線程數量,並且該限制將由O/S強制執行。如果確實如此,那麼他的測試仍然有效。另外,我不確定32位和64位機器之間是否有所不同,我想他的結果取決於RAM大小,32位/ 64位CPU以及可能的CPU數量。儘管如此,看起來他能夠創建13000個線程。

運行13k線程的一個大問題是,花費的時間context switching肯定會耗盡所有可用的CPU,並且您很可能無法完成任何工作。

如果你正在研究的應用程序正在創建大量應該在做緊張工作的線程,那麼可能不會像處理髮生上下文切換的問題一樣導致進程掛起。很顯然,多線程應用程序中最常見的問題是資源死鎖,但有許多工具可用於解決該問題。

嘗試有關死鎖以下鏈接,以確定是否這就是你實際運行到:

+0

謝謝,這個答案非常有幫助。 – driis 2010-01-24 14:54:32

相關問題