[总结]一个进程最多可以生成多少个线程?

据说windows操作系统中可以允许的最大操作线程数是有限制的,默认情况下,一个线程的栈要预留1M的内存空间,栈的分配是从高地址(栈顶)到低地址分配的,所以后来分配的j的地址就比i地址小。

可以通过连接时修改默认栈大小,如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程。

即使物理内存再大,一个进程中可以起的线程总要受到2GB这个内存空间的限制。比方说你的机器装了64GB物理内存,但每个进程的内存空间还是4GB,其中用户态可用的还是2GB。  

如果物理内存非常大,同一台机器内可以跑的线程数目的限制值会越来越大。  

 

对于服务端,你的服务器端程序设计成:

   来一个client连接请求则创建一个线程,那么就会存在2000个限制(在硬件内存和CPU个数一定的情况下)。

1. Serve many clients with each thread, and use nonblocking I/O and level-triggered readiness notification
2. Serve many clients with each thread, and use nonblocking I/O and readiness change notification
3. Serve many clients with each server thread, and use asynchronous I/O

 

Linux中将每个进程的线程最大数目定义为1024,但实际上这个数值还受到整个系统的总进程数限制,查看线程的命令:

ps -eLf  |  grep echo  |more

                                  参考至 http://blog.csdn.net/vipfengxiao/article/details/6010986

posted @ 2014-10-21 11:38  feed_bird  阅读(1159)  评论(0编辑  收藏  举报