gpt4 book ai didi

c - UNIX:程序中的最大线程数

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:07 25 4
gpt4 key购买 nike

我的 C 程序无法创建超过 8 threads .它返回错误代码 EAGAIN(11) .这是因为缺乏可用资源。在发布这个问题之前,我在谷歌上搜索了它的解决方案,但没有得到太多帮助。以下是我为我的程序和 unix 系统找到的详细信息。

我的线程创建函数是:-

thread_initialise(File *CFG_FILE)
{
int total_pthreads; //reads number of threads I want for the program from configuration file.
int rc =0 ;
for (i = 0; i < total_pthreads; i++)
{
rc = pthread_create (&pthread_list[i], NULL, (fp)(begin_worker_pthread), NULL);
if (rc !=0) printf("Thread creation Error Code: %d",rc);
}
}

我的程序在执行时消耗的内存是:pmap -x <pid> = 1111844

Unix 版本:uname -a = Linux 2.6.18-308.24.1.el5 #1 SMP Wed Nov 21 11:42:14 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

unix 中的线程最大值 cat /proc/sys/kernel/threads-max = 81920

ulimit -u max user processes (-u) 16000

ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 40960
max locked memory (kbytes, -l) 3000000
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 5857280
real-time priority (-r) 0
stack size (kbytes, -s) 512000
cpu time (seconds, -t) unlimited
max user processes (-u) 16000
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

请帮助我的系统如何计算/固定最大线程数。我想将线程增加到 32 .

最佳答案

从终端设置 ulimit -s 4000。现在你可以运行比以前更多的线程,但你会在某些阶段遇到段错误。

线程数=总虚拟内存/(堆栈大小*1024*1024)

The number of threads per process can be increased by increasing total virtual memory or by decreasing stack size. But, decreasing stack size too much can lead to code failure due to stack overflow while max virtual memory is equals to the swap memory.

更多信息请参阅 this帖子解释清楚。

关于c - UNIX:程序中的最大线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18464041/

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