我知道在应用程序中创建太多线程并不是你可能称之为其他正在运行的进程的"好邻居",因为即使这些线程处于有效的休眠状态,也会消耗cpu和内存资源.
我感兴趣的是:睡眠线程消耗了多少内存(win32平台)?
从理论上讲,我假设在1mb的区域内(因为这是默认的堆栈大小),但我很确定它不到这个,但我不确定为什么.
任何有关这方面的帮助将不胜感激.
(我问的原因是我正在考虑引入一个线程池,我想通过创建一个包含5个线程的池来节省多少内存,而不是20个手动创建的线程)
我有一个服务器应用程序,它在线程使用量很大,它使用一个由客户设置的可配置线程池,并且在至少一个站点中它有1000多个线程,并且在启动时它只使用50 MB.原因是Windows 保留堆栈为1MB(它映射其地址空间),但它不一定分配在物理内存中,只是它的一小部分.如果堆栈增长超过生成页面错误并分配更多物理内存.我不知道初始分配是什么,但我认为它等于系统的页面粒度(通常为64 KB).当然,线程在创建时也会为其他东西使用更多的内存(TLS,TSS等),但我对总数的猜测大概是200 KB.请记住,任何不经常使用的内存都将由虚拟内存管理器卸载.