我在ubuntu下写了这么一个测试程序,发现运行后可以创建6000多个线程,
想知道一个进程最多能创建的线程数是由什么决定的。
请看我的图片上面显示了默认线程栈的大小为8M,而我的linux是64位的,内存为3M,硬盘为48GB,
按每个线程占用8M的空间来算,6000多个线程需要6000*8M的空间。怎么理解
11 个解决方案
#1
栈是8M只是表示 有8M可用地址而已。真正用多少内存则会根据使用量动态变化。
#2
用ulimit命令设置?
#3
用ulimit -a查看的栈大小为8M,我这边实际已经创建了6329个线程了。
#4
有道理,准备试试 在线程里面用一点局部变量占用栈空间,看下创建线程的数量有没有变化
#5
ld链接器是不是用命令行参数可以指定栈大小?
#6
跟文件句柄数有关,默认是1024, 可以通过ulimit 更改默认设置
#7
我的疑问是怎么会创建得了6000多个线程,资源从哪里来,而不是怎么如何创建这么多线程。
#8
线程跟文件句柄有关么
#9
线程也是内核对象,只要是内核对象都有内核句柄,有内核句柄,就会受到文件句柄数限制。
看看《操作系统原理》
#10
提醒:Linux是开源的。
#11
你开了6000多个线程,每个线程最多能使用8兆栈空间,而不是说你开了6000个就使用了6000*8兆内存
#1
栈是8M只是表示 有8M可用地址而已。真正用多少内存则会根据使用量动态变化。
#2
用ulimit命令设置?
#3
用ulimit命令设置?
用ulimit -a查看的栈大小为8M,我这边实际已经创建了6329个线程了。
#4
栈是8M只是表示 有8M可用地址而已。真正用多少内存则会根据使用量动态变化。
栈是8M只是表示 有8M可用地址而已。真正用多少内存则会根据使用量动态变化。
有道理,准备试试 在线程里面用一点局部变量占用栈空间,看下创建线程的数量有没有变化
#5
ld链接器是不是用命令行参数可以指定栈大小?
#6
跟文件句柄数有关,默认是1024, 可以通过ulimit 更改默认设置
#7
ld链接器是不是用命令行参数可以指定栈大小?
我的疑问是怎么会创建得了6000多个线程,资源从哪里来,而不是怎么如何创建这么多线程。
#8
跟文件句柄数有关,默认是1024, 可以通过ulimit 更改默认设置
线程跟文件句柄有关么
#9
跟文件句柄数有关,默认是1024, 可以通过ulimit 更改默认设置
线程跟文件句柄有关么
线程也是内核对象,只要是内核对象都有内核句柄,有内核句柄,就会受到文件句柄数限制。
看看《操作系统原理》
#10
提醒:Linux是开源的。
#11
你开了6000多个线程,每个线程最多能使用8兆栈空间,而不是说你开了6000个就使用了6000*8兆内存