设为首页 | 加入收藏
您现在的位置: 唯才教育网 >> 电脑频道 >> c/c++ >> 实验:一个进程到底能创建多少线程?

实验:一个进程到底能创建多少线程?

作者:佚名    来源:网友投稿    点击数:    更新时间:

  

在网上看到有朋友讨论,一个进程能创建的线程的最大数量,我学习了一下,做了这个小实验。

理论上,一个进程可用虚拟空间是2g,默认情况下,线程的栈的大小是1mb,所以理论上最多只能创建2048个线程。如果要创建多于2048的话,必须修改编译器的设置。怎么设置呆会儿再说。

在vc下写了一个控制台程序,目的很简单,就是创建4500个线程程

代码如下:

------------------------------------------------------------

#include <windows.h>
#include <process.h>
#include <stdio.h>

handle hprocess ;

handle hthread ;


dword winapi athread( void)//线程函数
{
waitforsingleobject( hprocess, infinite ) ;
return 0 ;
}

bool createthread( int threadnum )//参数表示创建的线程数
{
int i ;

hprocess = getcurrentprocess();

for( i = 0; i < threadnum; i++ )
{
hthread = null ;
hthread = (handle)_beginthreadex( null, 0, (unsigned int (__stdcall *)(void *))athread, null, null, null ) ;
if( hthread != null )
{
printf("\rthe number of thread : %d ", i+1 ) ;
}else{
printf("\nerror : create thread fail.\n") ;
return false ;
}
}
return true ;
}

int main()
{
printf("test : how much thread a process can create.\n") ;

createthread( 4500 ) ;

getchar();

return 0 ;
}

-----------------------------------------------------

为了不影响性能,线程不做任何操作,等待进程终止,在进程没有终止之前,,建立好的线程始终被挂起。

默认情况下,在我的机子上,创建到2024个进程时提示错误。

现在来讲如何设置栈的大小。我用的是vc2005。

菜单栏的“项目”->“***属性”,选择“配置属性”下的“链接器”下的“系统”,将堆栈保留大小设置为:524288,这个值就是512kb,这里的单位是字节,所以要自己换算,这样理论上能创建4096个进程。

再次编译,运行,这个时候创建到了4031个线程时失败,大约是原来的两倍,因为主线程要占用一定的内存,这个结果是正常的,验证了上面的理论。

目前还不知道的是线程的栈减半后,对于程序的运行有什么影响,线程压栈到底需要多少内存呢?各位发表一下意见吧。

查看和“c/c++”有关的所有文章


  • 上一篇文章:

  • 下一篇文章: