python线程内存使用率64位vs 32 bi

2024-06-16 12:29:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基本的python程序,它生成大量的线程(2000),处理一些东西,然后将其写出。在

我缩小了我的代码范围,使其与此类似(使用2k线程): URL获取线程示例: http://www.ibm.com/developerworks/aix/library/au-threadingpython/

除了在我的类里,我什么都不做(从队列中获取项目,然后调用任务完成)。在这个缩小的版本中,和我做事情的版本中,内存使用量是相同的。在32位python解释器中,我使用大约105meg的虚拟内存。在64位中,我使用了8个以上的gig。在

我在运行rhel 6。我还补充道: 线程.堆栈大小(32768) 减小堆栈大小。我假设python正在获取一些默认的内存保留限制,我只是不知道这个限制是什么。在

有什么想法吗?在

谢谢!在


Tags: 内存代码程序版本comhttpurl示例
2条回答

如果您使用的是RHEL6或glibc高于2.10(可以使用rpm-qglibc检查)。是因为马洛克·阿雷纳·马克斯的失踪

在RHEL6中,glibc的malloc(>;=2.10)有一个新的arena分配器,允许每个线程分配自己的arena。可重用竞技场的最大数量取决于核心的数量。在64位系统上,这些arena是64M映射,16核系统的arena默认数量可以达到128个。您可以轻松获得128*64MB=8GB。因此,当使用多个线程时,它会导致大量的虚拟内存(VMS)(尽管RSS的增加可能是完全正常的)

这可以通过设置env来解决。将MALLOC_ARENA_MAX变量设置为1或4这样的小数字。在

如果您真的需要2k+线程,您将有兴趣阅读有关全局解释器锁(GIL):http://wiki.python.org/moin/GlobalInterpreterLock

相关问题 更多 >