【发布时间】:2011-04-07 17:43:40
【问题描述】:
我正在用 C 编写一些东西,在 Linux 中创建了很多 Pthread。
当我用少量线程运行程序时,它可以工作,但是一旦我让它创建大约 1000 个线程,它就会出错。现在设置了errno 标志,但我想知道是哪一个问题导致了它。 EAGAIN、EINVAL、ELEMULTITHREADFORK 或 ENOMEM。
有什么方法可以查出是不是这些错误之一,如果是,是哪一个?
【问题讨论】:
-
1000 个线程 == 修复您的设计。
-
我知道这有点离题,但你需要创建那么多线程吗?是否可以使用线程池 (en.wikipedia.org/wiki/Thread_pool) 实现您的设计?
-
1000个甚至100000个线程都没有问题。一个好的实现可以很好地处理它们。
-
1000 个线程 == 购买更大的计算机和/或尝试不同的操作系统。
-
由于 glibc 荒谬的默认堆栈大小,每个人都忽略了 OP 只是用完了虚拟地址空间。
标签: c linux unix pthreads stack-overflow