260个线程后pthread_create()失败

时间:2014-03-18 13:58:05

标签: linux multithreading glibc

我有大约500个线程,我希望它们同时运行。 我读到默认的glibc只允许大约300个线程同时运行。 他们是怎么得到这个数字的? (我在32位系统上)

1 个答案:

答案 0 :(得分:2)

linux上一个线程的默认堆栈大小是10MB(或者一些是8)。在32位Linux上,用户空间应用程序有3GB的内存地址空间,有些用于共享库,堆,代码和其他内务处理,耗费大约260个线程(2.6GB内存)的地址空间是合理的。

您可以使用较少的堆栈空间,因此创建具有较少堆栈空间的线程,例如

pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, 1024*1000*2);

pthread_create(&tid, &attr, threadfunc, NULL);