2010-01-11 65 views

回答

0

線程堆棧大小是可配置的,使用pthread_attr_setstack方法。線程數量僅限於您擁有的資源,超過2K個線程在我所知道的應用程序中工作。

3

的最大線程數:Maximum number of threads per process in Linux?

堆棧大小:

即使現在提供pthread_attr_setstacksize()和pthread_attr_setstackaddr(),我們還是建議您不要使用它們,除非你真的有很強的這樣做的理由。 LinuxThreads的默認堆棧分配策略幾乎是最優的:堆棧啓動很小(4k),並按需自動增長到相當大的限制(2M)。而且,沒有便捷的方法來估計線程的堆棧需求,所以自己設置堆棧大小會使程序不可靠和不可移植。

(從http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html

+1

LinuxThreads在將近7年的時間裏沒有任何Linux發行版。特別是,自RHEL3以來,RHEL並未發佈LinuxThreads。 – 2010-01-11 15:00:16

+0

@Jörg。同意。我找不到更好的文檔。你有鏈接嗎? – 2010-01-11 16:07:41

1

沒有通過的進程線程的最大數目。

然而,總活動線程有限制。這個值可以通過鍵入檢索:

cat /proc/sys/kernel/threads-max 

你也可以改變這個值:

echo 99999 > /proc/sys/kernel/threads-max 

希望這有助於。

1

如果你使用的是32位機器,那麼線程堆棧最終將佔用地址空間,具體取決於大小,可能在< 10,000個線程中。

10k線程肯定是可行的,有些人確實運行了那麼多的生產服務器,但是您確實希望確保這是做您的工作的最佳方式。

如果您正在考慮擁有10k線程,那麼您可能擁有64位機器以及大量內存。

+0

x86上的默認線程堆棧大小爲4KiBytes。使用4G/4G拆分內核配置,理論上可以啓動2 ** 20個線程(超過100萬)。當NPTL首次發佈時,作者實際上運行了該測試,並且它們的最大值出現在900000以下。您可以輕鬆啓動100000個線程(大約需要2秒),系統仍然可用(與LinuxThreads不同,在線程啓動100000個線程需要超過15分鐘,並使系統停下來)。 – 2010-01-11 14:59:42

+0

我正在設計大多數應用程序需要比4k堆棧多得多的假設。 – MarkR 2010-01-11 17:01:32

+0

這是不正確的,Jörg。在i686上,glibc將爲每個線程預留10M的地址空間。很明顯,這些內存都沒有被分配,但是它佔用了大量的可用映射空間,並且只會在幾百個線程之後耗盡。啓動100k個線程需要調整堆棧大小參數。我懷疑你只是在考慮內核,而不是pthread的glibc實現。 – 2010-01-11 19:52:27