一个进程最多能包含多少线程

  //小watch水平有限,希望大家多多指正文中的错误,共同进步

最近在学习os的多线程课程,第一个实验室关于windows的多线程,用mfc实现。实验蛮简单的,但是,我不由想到了,一个进程最多能包含多少个线程。

在网上查了查,貌似也没找到多少这方面的资料。大部分都是关于服务器多线程链接sever的,关于本机可执行exe的进程数倒是没有什么涉及。

我觉得唯一一个有用的出处:http://bbs.pediy.com/archive/index.php?t-26541.html

   中间有一句:个人认为是这样的:每个进程是有4G的内存空间,其种只有一部分是给用户使用的,其余是内核使用的,具体多少跟操作系统有关。进程中的所有线程公用这一空间。每个线程又自己的堆栈,再win2k下,如果用VC写程序的话,你能使用的地址空间约为2G,,线程的默认堆栈是1M,可以在编译程序时修改。因此可以推算一个进程的线程数也就两千多个。

机器配置:虚拟机 +xp  +1G内存

废话不多说,直接上图。

主要用一个全局变量 i 标识下,并在i%1000 == 0,时,用getchar()中断下。

出来的结果并不是我想像中的那样子。

可以看到pid变得非常非常大,这也让我的机器变得特别卡,这个原因可能就是之前的程序中,创建的线程对应的句柄被大量占用,但却没有被释放。

 

但是,这和我想要的结果相差很多,再检查,发现线程是void,执行完io操作后,直接就退出挂起了。于是改动如下:

ok,这下应该差不多了。。执行

然后到这里,我的虚拟机完全卡住了~~   ⊙﹏⊙b汗

再等一会。。

 

直接不响应了!!

好吧,到这边,基本上,可以总结下了。

1.进程中,线程的代码执行完直到返回,线程的生命周期基本就算结束了,之后不会占用cpu。但是如果用于标识的线程句柄不释放的话,那么之后执行其它进程时分配的pid就会特别大,计算机也会变得特别卡。

2.结合网上的资料,可以得出一个结论。进程包含多少线程,其实并不能用个数来衡量,而是取决于电脑的配置。而之前引用中那位说的,线程的默认堆栈是1M,可以在编译程序时修改。所以,所有的线程创建失败提示或是线程最多数,其实都是基于os(operating system)操作系统软件的认为设置或设定的。所以最终决定一个进程最多包含多少线程的因素,其实还是硬件的支持度,一切软件(包括os)的设定都基于,在保证自己运行的基础上,提供内存给进程和线程,而在内存的使用层面,进程和线程其实是一个水平线上的。

by--secondwatch 转载请注明出处

你可能感兴趣的:(一个进程最多能包含多少线程)