问题: 为什么只能建300来个线程
因为线程栈默认8M 3G用户空间刚好够300多个
线程栈的大小__default_stacksize在初始化时被设置为rlimit的大小
ulimit -s
8192
如果没有限制,__default_stacksize = #define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
所以最简单减小线程栈的方式就是ulimit 更改父shell的值(如果程序无法修改,否则attr可用)
在程序中setrlimit是不行的,因为在很早的时候(当然肯定是main之前)__default_stacksize就会被设置
阅读(2210) | 评论(0) | 转发(0) |