一个进程可以创建多少线程?

以前一直没有试过也没怎么想过这个问题,模糊觉得和系统性能与有关系,前2天写个小程序试了一下,如下

#include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "windows.h" #include "process.h" unsigned int __stdcall myfun(void* p) { int index = (int)p; printf("I am the No. %d thread/n", index); //等待一下,防止创建出来就退出 Sleep(1000 * 10); return index; } int _tmain(int argc, _TCHAR* argv[]) { int cnt = 0; while (true) { cnt++; if (0 == _beginthreadex(NULL, 0, myfun, (void*) cnt, 0, NULL)) { break; } else { printf("%d threads were created/n", cnt); } } Sleep(1000 * 100); return 0; }  

在我机器上的结果是成功创建了2027个线程,为什么是2027呢,因为每个线程都有自己的栈,编译器默认堆栈大小为1M, 每个进程有2G的用户地址空间,则理论上最多可以创建2048个线程,但考虑到还有代码段、共享库等要占用地址空间,所以2027是比较合理的一个值。(注意,这里可以创建多少线程和机器上的物理内存没有之间关系)

如果在把链接选项的栈大小改变,则能创建的线程也会改变,如下图,改为512k, 则可以创建4040个线程

 一个进程可以创建多少线程?_第1张图片

你可能感兴趣的:(技术,编译器,null)