gpt4 book ai didi

linux - Linux 中每个进程的最大线程数

转载 作者:IT王子 更新时间:2023-10-29 00:15:36 28 4
gpt4 key购买 nike

我写了一个简单的程序来计算一个进程在linux(Centos 5)中可以拥有的最大线程数。这是代码:

int main()
{
pthread_t thrd[400];
for(int i=0;i<400;i++)
{
int err=pthread_create(&thrd[i],NULL,thread,(void*)i);
if(err!=0)
cout << "thread creation failed: " << i <<" error code: " << err << endl;
}
return 0;
}

void * thread(void* i)
{
sleep(100);//make the thread still alive
return 0;
}

我发现线程的最大数量只有 300!?如果我需要更多怎么办?我必须提到 pthread_create 返回 12 作为错误代码。

先谢谢

最佳答案

Linux 有一个线程限制,可以通过将所需限制写入/proc/sys/kernel/threads-max 来修改运行时。默认值是根据可用的系统内存计算得出的。除了这个限制之外,还有另一个限制:/proc/sys/vm/max_map_count,它限制了最大映射段,至少最近的内核会为每个线程映射内存。如果您达到该限制,将其增加很多应该是安全的。

但是,在 32 位操作系统中您遇到的限制是虚拟内存不足。如果您的硬件支持,请安装 64 位 linux,这样就没问题了。我可以轻松启动 30000 个线程,堆栈大小为 8MB。该系统有一个 Core 2 Duo + 8 GB 系统内存(我同时使用 5 GB 用于其他东西)并且它运行 64 位 Ubuntu 和内核 2.6.32。请注意,必须允许内存过量使用 (/proc/sys/vm/overcommit_memory),否则系统将需要至少 240 GB 的可提交内存(实际内存和交换空间的总和)。

如果您需要大量线程并且不能使用 64 位系统,您唯一的选择是最小化每个线程的内存使用量以节省虚拟内存。从请求尽可能少的堆栈开始。

关于linux - Linux 中每个进程的最大线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635362/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com