免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1516 | 回复: 5
打印 上一主题 下一主题

为什么只能创建380个线程?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-01 16:06 |只看该作者 |倒序浏览
系统kernel2.6 ,nptl线程库

  1. #include <stdio.h>;
  2. #include <pthread.h>;

  3. void *thread_routine(void *arg)
  4. {
  5.   // printf("hello world");
  6. }

  7. int  main(int argc,char *argv[])
  8. {
  9.   pthread_t thread_id;
  10.   void *thread_result;
  11.   int status;
  12.   int i=0;
  13.   int nsuss=0;
  14.   for(i=0;i<500;i++)
  15.     {
  16. status=pthread_create(&thread_id,NULL,thread_routine,NULL);
  17.   if(status != 0)
  18.     {
  19.       perror("create thread");
  20.       return 0;
  21.     }
  22.   else
  23.     {
  24.       printf("create suss:%d",nsuss++);
  25.     }
  26.     }

  27.   while(1)
  28.     sleep(100);
  29. }
复制代码

到380左右就出现Cannot allocate memory错误
是否是系统问题?
如何使其能创建上1k个线程?
谢谢了!
[/quote]

论坛徽章:
0
2 [报告]
发表于 2005-06-01 16:22 |只看该作者

为什么只能创建380个线程??

前兩天還看到類似的帖子,改棧大小就好了,問一下各位大蝦吧

论坛徽章:
0
3 [报告]
发表于 2005-06-01 16:26 |只看该作者

为什么只能创建380个线程??

ulimit -s 256

论坛徽章:
0
4 [报告]
发表于 2005-06-01 16:27 |只看该作者

为什么只能创建380个线程??

线程数由好几个参数决定,
通过ulimit -a命令你可以看到你系统默认的一些参数,
其中open files 、stack size决定你能创建的线程数。
open files = 最大线程数
memory size / stack size = 最大线程数
所以你需要修改这两个参数。

一般系统默认的最大打开文件数就是1024,如果还要更多,需要修改系统头文件,重新编译系统,不过,真的需要那么多线程么?

  1. [kunp@test kunp]$ ulimit -a
  2. core file size        (blocks, -c) unlimited
  3. data seg size         (kbytes, -d) unlimited
  4. file size             (blocks, -f) unlimited
  5. max locked memory     (kbytes, -l) 4
  6. max memory size       (kbytes, -m) unlimited
  7. open files                    (-n) 1024
  8. pipe size          (512 bytes, -p) 8
  9. stack size            (kbytes, -s) 1024
  10. cpu time             (seconds, -t) unlimited
  11. max user processes            (-u) 7168
  12. virtual memory        (kbytes, -v) unlimited

复制代码


修改堆栈大小

  1. [kunp@test kunp]$ ulimit -s 100
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-06-01 17:04 |只看该作者

为什么只能创建380个线程??

谢谢大家!

论坛徽章:
0
6 [报告]
发表于 2005-06-02 10:25 |只看该作者

为什么只能创建380个线程??

和用户的系统内存大小有关
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP