多线程与虚拟内存

前面文章提到siege是一个多线程程序,在32位的机器上,我准备使用500个并发做测试,结果发现报内存不够的错误。
于是,使用gdb跟了一下,在创建完线程后,报错的函数出停止,看看到底使用了多少内存,结果发现使用虚拟内存3G,实际占用物理内存2.3M,很明显,不是物理内存不足,而是32位机器的虚拟内存的大小所限导致的,更大的物理内存也没有意义,关键是要支持更大的虚拟内存,如果使用64位的机器,一个够他折腾了。

问题: 创建线程真的需要很大的虚拟内存的开销吗?创建线程的开销是怎么计算的?和主线程占用内存大小的关系是怎样的?
再用gdb跟一下,这次在pthread_create处设置断点,使用top观察内存变化情况,发现:
 1. 创建线程之前,程序使用虚拟内存5M,物理内存1M
 2. 创建1个线程后,程序使用虚拟内存增加10M,物理内存增加4K
 3. 继续观察创建更多线程的情况,发现,每创建一个线程,虚拟内存增加10M,物理内存增加4K

线程真的很消耗虚拟内存资源吗?都用来做什么了?

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据