首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux中每个进程的最大线程数是多少?

问在Linux中每个进程的最大线程数是多少?
EN

Stack Overflow用户
提问于 2008-12-05 15:38:07
回答 18查看 461.7K关注 0票数 273

在Linux下,一个进程可以创建的最大线程数是多少?

如何(如果可能)修改此值?

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2008-12-05 15:56:54

Linux对每个进程没有单独的线程限制,只是对系统上的进程总数有一个限制(在Linux上,线程本质上就是具有共享地址空间的进程),您可以这样查看:

代码语言:javascript
复制
cat /proc/sys/kernel/threads-max

缺省值是内存页数/4。您可以像这样增加:

代码语言:javascript
复制
echo 100000 > /proc/sys/kernel/threads-max

单个用户可以创建的进程(以及线程)的数量也有限制,有关这些限制的详细信息,请参阅ulimit/getrlimit。

票数 277
EN

Stack Overflow用户

发布于 2012-02-09 21:39:33

说LINUX没有每个进程单独的线程限制是错误的。

Linux间接实现了每个进程的最大线程数!!

代码语言:javascript
复制
number of threads = total virtual memory / (stack size*1024*1024)

因此,可以通过增加总虚拟内存或减少堆栈大小来增加每个进程的线程数量。但是,当最大虚拟内存等于交换内存时,过多地减小堆栈大小可能会导致堆栈溢出导致代码失败。

检查你的机器:

总虚拟内存:ulimit -v (默认为无限制,因此您需要增加交换内存来增加此值)

总堆栈大小:ulimit -s (默认为8Mb)

用于增加这些值的命令:

代码语言:javascript
复制
ulimit -s newvalue

ulimit -v newvalue

*将新值替换为您要设置为限制的值。

参考:

http://dustycodes.wordpress.com/2012/02/09/increasing-number-of-threads-per-process/

票数 71
EN

Stack Overflow用户

发布于 2008-12-05 16:03:16

实际上,限制通常是由堆栈空间决定的。如果每个线程都有一个1MB的堆栈(我记不清这是否是Linux的默认设置),那么您的32位系统将在3000个线程之后耗尽地址空间(假设最后一gb是为内核保留的)。

然而,如果你使用超过几十个线程,你很可能会体验到糟糕的性能。迟早,你会得到太多的上下文切换开销,调度器中的太多开销,等等。(创建大量线程只会占用大量内存。但是有许多实际工作要做的线程会减慢您的速度,因为它们正在争夺可用的CPU时间)

在这个限制甚至是相关的情况下,您在做什么?

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/344203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档