2010-10-05 55 views
1

主執行路徑(主線程)將分爲兩個執行路徑(不同主機上的兩個新線程),但主線程不再需要。我可以將一個任務分配給主線程並保存一個線程(一個任務通過主線程,另一個通過一個新線程),但我想知道將主線程置於無限的睡眠中Thread.Sleep(Timeout.Infinite)是一個好方法或不是。我的類將被實例化很多次,如果無限睡眠中的線程從操作系統獲取資源對我來說是個壞消息。Thread.Sleep(Timeout.Infinite)性能問題

+0

使用主線程或新線程在任務上有任何區別/標準嗎? (考慮這是一個ASP.NET應用程序) – Xaqron 2010-10-05 05:01:29

回答

1

您創建的每個線程都佔用堆棧空間。在Windows上,默認情況下爲1MB。還有其他內部管理數據結構,操作系統用它來跟蹤線程,這些線程也會佔用一些內存,但1MB堆棧肯定會成爲最大的資源消耗者。如上所述,如果我們只談論2線程和3線程,那麼差別非常小。如果它是200比300,那麼你可能有些擔心。但是如果你產生了很多線程,那麼最好使用某種線程池(比如the one built-in to the .NET framework),而不是產生單個線程。

+0

謝謝。由於它是一個asp.net應用程序,我無法使用池。 – Xaqron 2010-10-05 05:00:28

+0

@Xaqron:你仍然可以在ASP.NET應用程序中使用線程池,爲什麼你認爲你不能?那麼Thread.Sleep(Timeout.Infinite)如何在ASP.NET應用程序中工作呢?你在哪裏做這種「無限」的睡眠? – 2010-10-05 05:07:19

+0

如果您將有很多線程(我的方案)使ASP.NET陷入捱餓,因爲我們都知道它使用工作線程來處理請求,所以我在某處使用ASP.NET應用程序中的線程池讀取數據。我在http處理程序的開始處使用了無限循環,並且我將在另一個問題中描述整個場景,因爲任何人都不喜歡冗長的模糊問題。 – Xaqron 2010-10-05 05:19:48

0

無論他們是否在睡覺,所有線程都會佔用資源。