This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/EVMK2H:每个进程的最大线程限制

Guru**** 2587365 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/593055/linux-evmk2h-max-thread-limit-per-process

器件型号:EVMK2H

工具/软件:Linux

您好!

我们有多个 EVMK2H REV4.0板、并使用适用于 K2H/K2K v03.02.00.05的 Processor SDK Linux 和8GB 内存 DIMM 对其进行了设置。

我们将使用 tftpserver/NFS 服务器方法来启动电路板、主机是 Ubuntu 16.04 PC。

我们将在 ARM 处理器上运行的应用程序应在单根 Linux 线程下运行、该线程可能需要创建多达1000个线程。  在初始测试期间、我们发现无法创建1000个线程。  最初、我们能够创建380个线程、并且能够确定此限制是由于每个线程的默认堆栈大小为8MB。  但是、即使在将默认堆栈大小更改为非常小的16k 后、我们可以创建的最大线程数也是509。

是否有人知道是否有其他资源阻止创建超过509个线程。

欢迎提出任何建议。

此致、

Bob


--下面是我们正在使用的测试程序的源代码,然后是样本输出。


//================================================================
//=========== 测试程序 threadTest
//================================================================
#include
#include
#include
#include

#define NUM_THREADS 1000
void * aThread (void* parm){
 睡眠(5);
 返回空;

int main4(){
 int i、err;
 int nCreated = 0;
 size_t stacksize;
 pthread_attr_t 属性;
 
 pthread_t thrd[NUM_threads];
 
 printf ("正在尝试创建%d 个线程\n"、NUM_THREADS);

 for (i=0;<NUM_THREADS;i++) {)
   ERR = pthread_create (&thrd[i]、NULL、aThread、NULL);
   如果(err){
     printf (" pthread_create()创建线程%d 失败,错误%d\n",i+1,错误);
     errno = err;
     perror (" 错误代码为");
     中断;
   }否则{
     如果(nCreated = 0){
       if (pthread_getattr_np (thrd[i]、&attr)=0){
         pthread_attr_getstacksize (&attr、&stacksize);
         printf ("Thread 栈大小=%d 字节\n"、stacksize);
       }
     }
     n 已创建++;
   }
 }
 
 printf ("正在加入%d 个线程...\n"、i);
 对于(i=1 <nCreated; i++) {
   pthread_join (thrd[i]、NULL);
 }
 
 返回0;

//================================================================
//=========== 样本输出-缺省堆栈大小为8MB
//================================================================

root@k2hk) EVM:~/testing# ulimit -a
内核文件大小         (块、-c) 0
数据段大小          (KB、-d)不受限制
调度优先级            (-e) 0
文件大小              (块、-f)不受限制
待处理信号                (-I) 60560
最大锁定存储器      (KB、-l) 64
最大存储器大小        (KB、-m)不受限制
打开文件                     (-n) 1024
管道大小           (512字节、-p) 8.
POSIX 消息队列    (字节、-q) 819200
实时优先级             (-r) 0
栈大小             (KB、-s) 8192
CPU 时间              (秒、-t)不受限制
最大用户进程             数(-u) 60560
虚拟内存         (KB、-v)不受限制
文件锁定                     (-x)不受限制

root@k2hk EVM:~/testing#./threadTest

尝试创建1000个线程
线程堆栈大小= 8388608字节
 pthread_create()创建线程381失败,错误11
 错误代码为:资源暂时不可用
正在连接380个线程...


//========================================================================================
//=========== 采样输出-堆叠大小更改为16K
//========================================================================================

root@k2hk EVM:~μ A/测试# ulimit -s 16.

root@k2hk EVM:~/testing#./threadTest
 
尝试创建1000个线程
线程堆栈大小= 16384字节
 pthread_create()创建线程510失败,错误11
 错误代码为:资源暂时不可用
正在连接509个线程...

//========================================
//==内存信息===
//========================================

root@k2hk EVM:~/testing# grep MemTotal /proc/meminfo
总内存: 7784860 KB

root@k2hk) EVM:~/testing# free -m
            可用     的可用空    闲共享    缓冲区/高速缓存总数     
MEM:     7602      34     7502        17            65         7506
交换:       0       0        0