windows能创建多少个线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows能创建多少个线程相关的知识,希望对你有一定的参考价值。

比如XP系统默认是10线程,但是可以修改的。主要与你电脑的虚拟内存的大小有关。
如果你的电脑虚拟内存为2G的话,按默认最大可以开到2028个线程,(1个线程默认占用1M内存)。
至于最多可以创建多少个线程,以此推算吧。
参考技术A 哥本来很低调的,不管是看 到什么新闻,或者是什么日志,哥都会随风而过。可是时间久了,哥发现了,哥要评论了,因为哥也是一个有感情的人,哥上小学就暗恋上小学老师了,初中的时候,哥就有想和老师上床的冲动了。哥本来打算高中的时候和老师上床的,可是哥 却没考上高中。于是到了社会,开始混社会,可是看着一个个的大哥都成了家,生了孩子过日子。哥也打算找个老婆好好过日子算了,可是一个凤姐彻底把哥打击了,哥连凤姐的要求都达不到。于是哥又准备好好奋斗,有了事业就什么都会有 的,可是一个乞丐犀利哥再一次把哥打击了。正当哥对生活失去意义的时候,一对农民工组合,又燃起了哥心中对生活的渴望,哥也要找份工作。发了工资哥才发现,物价上涨了,工资已经不是工资了,哥每天必吃的鸡蛋饼也从一块涨到两块 了,又从两块涨到三 块了。哥要对一个女人好的时候,女人却说你们男人说的话都是假的,哥用扯淡的态度,面对这操蛋的人生,哥已经无所谓了! 参考技术B 看你电脑配置了

单个 Windows 线程的内存开销是多少?

【中文标题】单个 Windows 线程的内存开销是多少?【英文标题】:What's the memory overhead for a single windows threads? 【发布时间】:2010-04-30 12:25:38 【问题描述】:

每个线程有 1 Mb 的堆栈吗?还是只是 CLR 线程?

我想通过任务管理器查看本地 Windows 线程 (c++) 和 CLR 线程的头顶内存。

谢谢

【问题讨论】:

【参考方案1】:

native 和 CLR 线程的默认值为 1 MB。您可以更改它,尽管这通常是个坏主意。

【讨论】:

它只保留1MB。在使用之前,它确实得到了物理支持。为什么你说改变它是一个坏主意?堆栈通常可以超出初始保留,如果 1MB 对于简单线程来说是多余的,那么你只是在分割你的地址空间。 我没说这是个坏主意。我说这通常是个坏主意。创建数以亿计的线程通常是解决问题的错误方法,因此减少堆栈大小以创建数以亿计的线程几乎肯定是错误的。是的,在某些情况下调整堆栈大小可以产生收益,但这只能由真正知道自己在做什么的人来做。另外,我不确定您所说的“堆栈通常可以超出初始储备”是什么意思。 AFAIK,没有用于增长堆栈的 API。 @Adrian 这是一个常见的误解。 The CLR actually commits 1MB of RAM per thread for the stack. @romkyns:你是对的。谢谢你教我一些新东西。您的链接已损坏,因此我在 MSDN 上找到了信息。 msdn.microsoft.com/en-us/library/ms686774%28VS.85%29.aspx @Adrian 叹息,在我发布该链接后不到 1 小时,该网站已关闭:/ 这是它的 google 缓存版本:The CLR commits the whole stack【参考方案2】:

请参阅 Mark Russinovich 关于 win32 内核 limits 的博客,了解单个线程有多大,以及使用了多少开销。

.NET 线程使用多少资源很难预测。我猜,不多。

【讨论】:

【参考方案3】:

内存开销(在 RAM 中)将是一个内存页。所以(取决于您的平台)这可能是 4KB。

两者的默认堆栈大小均为 1MB。然而,这只是虚拟内存,所以除非使用它,否则没有 RAM 开销。

【讨论】:

托管代码并非如此。 CLR 总是预先提交托管线程的线程堆栈,因此对于 CLR 线程,堆栈是根据提交限制计算的。当然,在被触摸之前,这仍然不是物理内存。 这就是我写的(或想写的)。我澄清了答案以明确它描述的是 RAM 开销。【参考方案4】:

根据前面的答案,基本开销是每个线程 1MB。我不会讨论各种细微差别 - 其他答案已经涵盖了它们。

对于 Microsoft Visual C/C++ 线程,您还拥有按需分配(并使用线程本地存储 TlsAlloc() 存储)的任何 C 运行时工作区的每个线程开销,以执行诸如 sprintf()、scanf( )、strtol() 等。我没有任何确切的数字 - 您需要将源扫描到 Microsoft CRT 来计算。

对于其他 C/C++ 运行时 (gcc/g++/borland/digital mars),可能会或可能不会保存类似的每线程数据,这是一个实现细节。

我们都不知道 .Net 执行引擎的内部结构,但那里可能也存储了一些每个线程的数据。不过很难弄清楚开销是多少。

【讨论】:

以上是关于windows能创建多少个线程的主要内容,如果未能解决你的问题,请参考以下文章

Windows下用c++创建进程,再创建两个线程

最大线程数 Windows Threads limit

Windows 和 linux 最大线程数

Windows一共有多少个公开的API

windows 多线程问题 用windows api提供的函数创建4个线程 并用WaitForMultipleObjects 但结果有问题

使用两个处理器组的 C 线程处理