3

据我所知,PHP 将类加载到内存中并且从不释放它们。这在使用属性时可能会出现问题。

我想知道是否可以使用纤维。光纤的独立性如何?最终的问题是:如果一个 PHP 纤程加载一个类,它会自动加载到 PHP 代码的其余部分,还是一个单独的内存空间?

4

2 回答 2

1

在 Fiber 执行期间加载的代码在之后可用。在 Drupal 引导环境中运行以下代码:

var_dump(class_exists('\Drupal\Core\Action\Plugin\Action\DeleteAction', FALSE));
$fiber = new Fiber(function() : void {
  var_dump(class_exists('\Drupal\Core\Action\Plugin\Action\DeleteAction', TRUE));
});
$fiber->start();
var_dump(class_exists('\Drupal\Core\Action\Plugin\Action\DeleteAction', FALSE));

产生以下输出:

bool(false)
bool(true)
bool(true)
于 2022-01-11T05:19:32.330 回答
0

光纤共享相同的内存空间。每条光纤都有自己的调用堆栈。如果你在纤程中加载一个类,它会被加载到进程堆中,而不是在纤程堆栈分配的内存中。

于 2022-01-13T07:18:03.070 回答