To be a better coder
分类: LINUX
2020-09-28 14:04:49
I remember I typed "./client localhost & ./client localhost & ...." for repeating over 500+ times , in testing some network program.
And when I met some kind of stuck in the program, I got the error Resource temporarily unavailable, then can't start more client to test.
Even more, I can't even start a console terminator.
Here come the explanation :
"
Linux系统中每个线程都拥有独立的栈空间,而我的系统上调用ulimit -a看到的结果如下:
file locks (-x) unlimited
可以看到stack size是8M, 400个线程就需要8*400=3200M,虚拟内存不够用。
解决办法有两种:
1.使用ulimit -s 1024*1024命令,将线程栈大小临时设置成1M,经过试验能同时创建2000个线程了。
2.使用pthread_attr_setstacksize在程序中改变线程栈大小。