单个进程可以在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. 关于c中的线程#
- 3. 关于线程
- 4. 关于线程
- 5. 关于linux内存问题的C++多线程程序
- 6. 关于多线程的java多线程
- 7. 关于多线程
- 8. 关于Linux中的C/C++
- 9. 关于线程的术语
- 10. 关于线程的问题
- 11. 关于线程的加入
- 12. 关于线程的问题
- 13. 关于OSGi中线程数的信息
- 14. 在linux中的C线程?
- 15. C(linux)中的线程
- 16. Linux中的工作线程
- 17. 关于Linux shell编程的书
- 18. 关于线程退出
- 19. 关于线程安全
- 20. 关于线程安全
- 21. 关于多线程程序的查询
- 22. 关于在cuda中组织线程
- 23. 在C编程中的线程(linux)
- 24. Linux中进程/线程的大小
- 25. 关于Linux命令
- 26. 关于linux v0.01 bootsect.S
- 27. 关于Linux C - UUID
- 28. 关于Linux中的错误编号
- 29. Objective C,关于线程的问题
- 30. 关于线程和锁的问题
LinuxThreads在将近7年的时间里没有任何Linux发行版。特别是,自RHEL3以来,RHEL并未发布LinuxThreads。 – 2010-01-11 15:00:16
@Jörg。同意。我找不到更好的文档。你有链接吗? – 2010-01-11 16:07:41