关于linux下一个进程最多可以同时创建多少个线程

lxh8810 2016-08-23 10:24:50



我在ubuntu下写了这么一个测试程序,发现运行后可以创建6000多个线程,
想知道一个进程最多能创建的线程数是由什么决定的。

请看我的图片上面显示了默认线程栈的大小为8M,而我的linux是64位的,内存为3M,硬盘为48GB,
按每个线程占用8M的空间来算,6000多个线程需要6000*8M的空间。怎么理解
...全文
3626 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38058399 2020-07-28
  • 打赏
  • 举报
回复
子线程跟父进程是共享同一个虚拟地址空间的,所以可以多创建
milanleon 2016-12-04
  • 打赏
  • 举报
回复
你开了6000多个线程,每个线程最多能使用8兆栈空间,而不是说你开了6000个就使用了6000*8兆内存
赵4老师 2016-08-25
  • 打赏
  • 举报
回复
提醒:Linux是开源的。
shenyi0106 2016-08-25
  • 打赏
  • 举报
回复
引用 8 楼 lxh8810 的回复:
[quote=引用 6 楼 shenyi0106 的回复:] 跟文件句柄数有关,默认是1024, 可以通过ulimit 更改默认设置
线程跟文件句柄有关么[/quote] 线程也是内核对象,只要是内核对象都有内核句柄,有内核句柄,就会受到文件句柄数限制。 看看《操作系统原理》
赵4老师 2016-08-24
  • 打赏
  • 举报
回复
ld链接器是不是用命令行参数可以指定栈大小?
lxh8810 2016-08-24
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
栈是8M只是表示 有8M可用地址而已。真正用多少内存则会根据使用量动态变化。
引用 1 楼 akirya 的回复:
栈是8M只是表示 有8M可用地址而已。真正用多少内存则会根据使用量动态变化。
有道理,准备试试 在线程里面用一点局部变量占用栈空间,看下创建线程的数量有没有变化
lxh8810 2016-08-24
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
用ulimit命令设置?
用ulimit -a查看的栈大小为8M,我这边实际已经创建了6329个线程了。
赵4老师 2016-08-24
  • 打赏
  • 举报
回复
用ulimit命令设置?
lxh8810 2016-08-24
  • 打赏
  • 举报
回复
引用 6 楼 shenyi0106 的回复:
跟文件句柄数有关,默认是1024, 可以通过ulimit 更改默认设置
线程跟文件句柄有关么
lxh8810 2016-08-24
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
ld链接器是不是用命令行参数可以指定栈大小?
我的疑问是怎么会创建得了6000多个线程,资源从哪里来,而不是怎么如何创建这么多线程。
  • 打赏
  • 举报
回复
栈是8M只是表示 有8M可用地址而已。真正用多少内存则会根据使用量动态变化。
shenyi0106 2016-08-24
  • 打赏
  • 举报
回复
跟文件句柄数有关,默认是1024, 可以通过ulimit 更改默认设置

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧