据我所知,PHP 将类加载到内存中并且从不释放它们。这在使用属性时可能会出现问题。
我想知道是否可以使用纤维。光纤的独立性如何?最终的问题是:如果一个 PHP 纤程加载一个类,它会自动加载到 PHP 代码的其余部分,还是一个单独的内存空间?
据我所知,PHP 将类加载到内存中并且从不释放它们。这在使用属性时可能会出现问题。
我想知道是否可以使用纤维。光纤的独立性如何?最终的问题是:如果一个 PHP 纤程加载一个类,它会自动加载到 PHP 代码的其余部分,还是一个单独的内存空间?
在 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)
光纤共享相同的内存空间。每条光纤都有自己的调用堆栈。如果你在纤程中加载一个类,它会被加载到进程堆中,而不是在纤程堆栈分配的内存中。