我的目标是确定最大线程数,以便可以并行运行。我通过谷歌搜索了很多相关链接,其中他们给出了简单的数学计算方法:除以RAM / StackSize。在64位Linux中,我们将线程堆栈大小定义为10 MB(ulimit -s = 10240kb),而RAM为4GB,留下1 GB用于操作系统。按照这个计算方法,我可以拥有大约300个左右的线程,但我编写的小型测试应用程序却可以达到 ~32297 线程,然后会提示内存不足错误。
我尝试了不同的-Xss值,但是这些值对线程计数几乎没有任何影响,它仍保持在 ~32297。这让我留下了一个印象,即堆栈大小是可变的,并且由操作系统决定,在需要时可以增加到我们定义的最大值,但是无论我在哪里阅读,都说堆栈大小是静态的。
我到底缺少了什么?