單個進程可以在Linux(RHEL-5)中處理多少個線程?一旦創建了線程,每個線程可以獲得多少堆棧?關於Linux中的線程
回答
線程堆棧大小是可配置的,使用pthread_attr_setstack方法。線程數量僅限於您擁有的資源,超過2K個線程在我所知道的應用程序中工作。
的最大線程數:Maximum number of threads per process in Linux?
堆棧大小:
即使現在提供pthread_attr_setstacksize()和pthread_attr_setstackaddr(),我們還是建議您不要使用它們,除非你真的有很強的這樣做的理由。 LinuxThreads的默認堆棧分配策略幾乎是最優的:堆棧啓動很小(4k),並按需自動增長到相當大的限制(2M)。而且,沒有便捷的方法來估計線程的堆棧需求,所以自己設置堆棧大小會使程序不可靠和不可移植。
沒有通過的進程線程的最大數目。
然而,總活動線程有限制。這個值可以通過鍵入檢索:
cat /proc/sys/kernel/threads-max
你也可以改變這個值:
echo 99999 > /proc/sys/kernel/threads-max
希望這有助於。
如果你使用的是32位機器,那麼線程堆棧最終將佔用地址空間,具體取決於大小,可能在< 10,000個線程中。
10k線程肯定是可行的,有些人確實運行了那麼多的生產服務器,但是您確實希望確保這是做您的工作的最佳方式。
如果您正在考慮擁有10k線程,那麼您可能擁有64位機器以及大量內存。
x86上的默認線程堆棧大小爲4KiBytes。使用4G/4G拆分內核配置,理論上可以啓動2 ** 20個線程(超過100萬)。當NPTL首次發佈時,作者實際上運行了該測試,並且它們的最大值出現在900000以下。您可以輕鬆啓動100000個線程(大約需要2秒),系統仍然可用(與LinuxThreads不同,在線程啓動100000個線程需要超過15分鐘,並使系統停下來)。 – 2010-01-11 14:59:42
我正在設計大多數應用程序需要比4k堆棧多得多的假設。 – MarkR 2010-01-11 17:01:32
這是不正確的,Jörg。在i686上,glibc將爲每個線程預留10M的地址空間。很明顯,這些內存都沒有被分配,但是它佔用了大量的可用映射空間,並且只會在幾百個線程之後耗盡。啓動100k個線程需要調整堆棧大小參數。我懷疑你只是在考慮內核,而不是pthread的glibc實現。 – 2010-01-11 19:52:27
- 1. 關於linux中線程的混淆
- 2. 關於Python中的線程
- 3. 關於.NET中的線程
- 4. 關於c中的線程#
- 5. 關於線程
- 6. 關於線程
- 7. 關於線程
- 8. 關於linux內存問題的C++多線程程序
- 9. 關於Linux的
- 10. 關於多線程的java多線程
- 11. 關於多線程
- 12. 關於多線程
- 13. 關於多線程
- 14. 關於Linux中的C/C++
- 15. 關於線程的術語
- 16. 關於線程的問題
- 17. 關於線程的困惑
- 18. 關於線程的加入
- 19. 關於線程的問題
- 20. 關於Android Studio中的線程
- 21. 關於python中的線程混淆
- 22. 關於OSGi中線程數的信息
- 23. 在linux中的C線程?
- 24. Linux中的工作線程
- 25. C(linux)中的線程
- 26. 關於Linux shell編程的書
- 27. 關於內核版本3.x的線程上的Linux內核編程
- 28. 關於線程數多於核心時的linux調度器吞吐量
- 29. 關於線程安全
- 30. 關於線程安全
LinuxThreads在將近7年的時間裏沒有任何Linux發行版。特別是,自RHEL3以來,RHEL並未發佈LinuxThreads。 – 2010-01-11 15:00:16
@Jörg。同意。我找不到更好的文檔。你有鏈接嗎? – 2010-01-11 16:07:41