zoukankan      html  css  js  c++  java
  • windows 一个进程可以允许最大的线程数

    默认情况下,一个线程的栈要预留1M的内存空间 
    而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程 
    但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。 
    你也可以通过连接时修改默认栈大小,将其改的比较小,这样就可以多开一些线程。 
    如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程。 

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


    如果是同一台机器内的话,能起多少线程也是受内存限制的。每个线程对象都要站用非页面内存,而非页面内存也是有限的,当非页面内存被耗尽时,也就无法创建线程了。 

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

    在Windows下写个程序,一个进程Fork出2000个左右线程就会异常退出了,为什么?

    这个问题的产生是因为windows32位系统,一个进程所能使用的最大虚拟内存为2G,而一个线程的默认线程栈StackSize为1024K(1M),这样当线程数量逼近2000时,2000*1024K=2G(大约),内存资源就相当于耗尽。

    如果你的服务器端程序设计成:来一个client连接请求则创建一个线程,那么就会存在2000个限制(在硬件内存和CPU个数一定的情况下)。

  • 相关阅读:
    chrome sarfri form.submit bug
    ruby首字母大写
    ubuntu 10.04 中文设置
    添加centos用户
    农行的短信提醒很滞后
    从github删除敏感数据
    从github删除敏感数据
    国内有不有做虚拟化或是叫云平台的朋友
    设置rails header编码
    centos5.5
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/3888901.html
Copyright © 2011-2022 走看看