一个进程需要一个栈,默认8MB(可配置)
在 32 位 Linux 系统里,一个进程的虚拟空间是 4G,内核分走了1G,用户能用的只有 3G。
创建一个线程需要占用 8M 虚拟内存,总共有 3G 虚拟内存可以使用。于是我们可以算出,最多可以创建差不多 380个(3G/8M)左右的线程。
如果想使得进程创建上千个线程,那么我们可以调整创建线程时分配的栈空间大小,比如调整为 512k:
[ecs-user@iZ2ze923utbhhwxwgc0pd9Z ~]$ ulimit -s 512
64 位系统意味着用户空间的虚拟内存最大值是 128T,这个数值是很大的,一个线程需占用 8M 栈空间的情况来算,那么理论上可以创建 128T/8M 个线程,也就是 1000多万个线程,有点魔幻!
所以按 64 位系统的虚拟内存大小,理论上可以创建无数个线程。
前面学习我们了解到了64 位系统的虚拟内存大小,理论上可以创建无数个线程。不过事实上,肯定创建不了那么多线程,除了虚拟内存的限制,还有系统的限制。
比如下面这三个内核参数的大小,都会影响创建线程的上限:
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!