Linux pthread_create()在260个线程之后失败

Linux pthread_create()在260个线程之后失败,linux,multithreading,glibc,Linux,Multithreading,Glibc,我有大约500个线程,我希望它们同时运行。 我读到默认的glibc只允许大约300个线程同时运行。 他们是怎么找到这个号码的?(我在32位系统上)linux上线程的默认堆栈大小是10MB(或者在某些系统上是8)。在32位linux上,用户空间应用程序有3GB的内存地址空间,有些用于共享库、堆、代码和其他管理,在大约260个线程(2.6GB内存)处耗尽地址空间是合理的 您可能需要更少的堆栈空间,因此创建具有更少堆栈空间的线程,例如 pthread_attr_t attr; pthread_attr

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

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);

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);

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);

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);

您是否使用默认的堆栈大小?出于好奇,您需要500个线程做什么?谢谢您的回复。。我想我使用的是默认的堆栈大小。。我怎样才能看到这个进程的线程堆栈的大小呢?我想不出一个好的理由在一个有24个内核的桌面系统上需要500个线程。。您几乎肯定解决了错误的问题。您是否使用默认堆栈大小?出于好奇,您需要500个线程做什么?谢谢您的回复。。我想我使用的是默认的堆栈大小。。我怎样才能看到这个进程的线程堆栈的大小呢?我想不出一个好的理由在一个有24个内核的桌面系统上需要500个线程。。您几乎肯定解决了错误的问题。您是否使用默认堆栈大小?出于好奇,您需要500个线程做什么?谢谢您的回复。。我想我使用的是默认的堆栈大小。。我怎样才能看到这个进程的线程堆栈的大小呢?我想不出一个好的理由在一个有24个内核的桌面系统上需要500个线程。。您几乎肯定解决了错误的问题。您是否使用默认堆栈大小?出于好奇,您需要500个线程做什么?谢谢您的回复。。我想我使用的是默认的堆栈大小。。我怎样才能看到这个进程的线程堆栈的大小呢?我想不出一个好的理由在一个有24个内核的桌面系统上需要500个线程。。你几乎肯定解决了错误的问题