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