Ron*_*Ron 3 python multithreading
为什么python线程消耗这么多内存?
我测量产生一个线程消耗8兆内存,几乎和整个新的python进程一样大!
操作系统:Ubuntu 10.10
编辑:由于受欢迎的需求,我将给出一些无关的例子,这里是:
from os import getpid
from time import sleep
from threading import Thread
def nap():
print 'sleeping child'
sleep(999999999)
print getpid()
child_thread = Thread(target=nap)
sleep(999999999)
Run Code Online (Sandbox Code Playgroud)
在我的盒子上,pmap pid将给出9424K
现在,让我们运行子线程:
from os import getpid
from time import sleep
from threading import Thread
def nap():
print 'sleeping child'
sleep(999999999)
print getpid()
child_thread = Thread(target=nap)
child_thread.start() # <--- ADDED THIS LINE
sleep(999999999)
Run Code Online (Sandbox Code Playgroud)
现在pmap pid将给出17620K
因此,额外线程的成本是17620K - 9424K = 8196K
即.87%的人正在运行一个全新的独立流程!
现在不仅仅是,错了吗?
NPE*_*NPE 11
这不是特定于Python的,而是与操作系统为每个线程分配的单独堆栈有关.操作系统上的默认最大堆栈大小恰好为8MB.
请注意,8MB只是一块地址空间被搁置,最初只有很少的内存.额外内存在需要时提交到堆栈,最高可达8MB.
可以使用调整限制ulimit -s,但在这种情况下,我认为没有理由这样做.
另外,pmap显示地址空间使用情况.这不是衡量内存使用情况的好方法.如果相关,这两个概念是截然不同的.
| 归档时间: |
|
| 查看次数: |
3473 次 |
| 最近记录: |