gpt4 book ai didi

php - Lambda 函数索引

转载 作者:可可西里 更新时间:2023-11-01 00:35:29 24 4
gpt4 key购买 nike

我注意到每当我使用 create_function 时,都会为函数分配一个名称,如下所示:

lambda_N

奇怪的是,如果我刷新页面,N 会增加,如 lambda_2lambda_3

这是否意味着这些函数跨页面请求保留在内存中?如果我创建 20.000 个这样的函数,内存会爆炸吗?

最佳答案

为什么点击刷新后数字会增加

使用 mod_php 时,执行器(表示 php 解释器的状态)的生命周期比请求的生命周期长,因为执行器存储在 apache 进程的内存中。默认情况下,apache 进程不会终止,因此它可以在旧请求完成后处理新请求。基本上每个 apache 进程都有自己的执行器。

\0lambda_N 中的数字 N 对于每个执行程序必须是唯一的,因为这是函数表中的函数名称(它也存储在每个执行程序中)。数字 N 是从存储在 _zend_executor_globals 结构中的名为 lambda_count 的计数器生成的。它在每次调用 create_function 时递增。

因此,如果您刷新页面,您的请求将由相同的进程处理,并且 lambda_count 似乎每次都递增(在试验时我发现通过刷新 ctrl-f5 或执行其他请求,这个数字更随机,所以我假设这个过程更频繁地切换)。

函数是否留在内存中

简短的回答是。显然,在 php_request_shutdown 回调中的每个请求之后,都会清理函数表(除其他事项外,如 op 数组)。据我所知,函数条目仍在散列中,但函数操作码是免费d(我可能错过了删除散列条目的部分)。

因此执行器的某些成员在多个请求之间共享,但明智的成员被清除。

我不确定如果您使用 fcgi,函数的生命周期是如何处理的,其中 PHP 进程还服务于多个请求。

关于php - Lambda 函数索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9304653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com