【问题标题】:pthread_create() fails after 260 threads [duplicate]pthread_create() 在 260 个线程后失败 [重复]
【发布时间】:2014-04-24 06:22:17
【问题描述】:

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

【问题讨论】:

  • 您使用的是默认堆栈大小吗?
  • 出于好奇,你需要 500 个线程来做什么?
  • 感谢您的回复。。我想我使用的是默认堆栈大小。。如何查看此进程的线程堆栈大小?
  • 我想不出一个很好的理由来在可能有 24 个内核的桌面系统上使用 500 个线程。你几乎肯定是在解决错误的问题

标签: linux multithreading glibc


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多