无限循环 - 内存使用量?
我正在尝试理解一个while循环是如何决定使用多少内存的。
从基本的角度来看:
while True:
pass
如果我在PHP中做类似的事情,可能会让我的本地服务器变得非常慢。但在这种情况下,我预计它的内存使用量几乎是零。
那么在Python中,如果是一个无限循环,我应该期待它会消耗大量内存,还是说它的内存使用量会根据正在做的事情和位置来调整呢?
1 个回答
你的无限循环其实是个“无操作”,也就是它什么都不做,所以它不会让内存使用量超过你程序其他部分的使用量。要回答你的问题,你需要把你怀疑会导致内存问题的代码贴出来。
不过在PHP中,类似的循环会“卡住”,因为网络服务器在等着给客户端一个回应。由于没有收到回应,网页浏览器就会“冻结”。根据网络服务器的配置,它可能会选择结束这个进程并发出超时错误。
如果你在Python中使用一个网络框架,并在某个方法里放了一个无限循环,效果也是一样的,它会让客户端等着回应。
如果你在命令行中运行等效的PHP代码,效果就和用Python(或其他语言)写的一样。也就是说,你的控制台会被阻塞,直到你强制结束这个进程。
我问这个是因为我想创建一个无限运行的程序,但我不确定怎么判断它的资源占用情况。
一个无限运行的程序(我想你是这个意思)通常有两种情况:
它在等待某个触发事件来执行工作(比如网络服务器会无限运行,但它只是静静地等着有人访问你的网站)
它在执行一个耗时的过程。
对于第二种情况,你需要通过弄清楚正在做什么工作来判断资源的使用情况。
如果它是在构建一个很大的待处理事项列表来进行计算或排序,那么随着列表的增长,内存使用量也会增加。
如果它在处理一堆文件,并且在这个过程中生成了很多存储在磁盘上的输出,那么磁盘使用量会增加,等到处理完成后又会减少。
如果它是一个渲染引擎,那么内存和CPU的使用量会增加,同时在渲染过程中,内存被交换出去时磁盘使用量也会增加。不过,这种系统对磁盘的压力不会太大。
总之,除非你解释清楚正在运行的过程,否则是无法得到答案的。