2

我正在开发一个非常小的库来跨 PHP 进程进行异步调用,并且在引用对象(和数组 - 无论引用对象还是数组时都会发生同样的问题)方面遇到一些奇怪的行为。最终结果是对象和数组暂时显示为空,我试图找出发生这种情况的原因。

下图显示了从父进程生成 3 个子进程的脚本跟踪。所有输出都来自父进程(没有任何内容通过子进程泄漏到终端)。父进程向子进程发出一系列请求,并通过一对 FIFO 管道接收响应:

脚本跟踪

  • 蓝色行表示父级成功发送和接收响应的位置。
  • 红行表示父级成功发送和接收响应的位置,但在收到响应后,父级中包含 RPC 表示的对象神秘地“空”,因此应该与该 RPC 响应关联的操作可以“ t 被调用,因为它不能被引用。
  • 在每个成功或失败之前显示一个金色行,显示持有所有等待响应的 RPC 的对象的状态。该行包含对象 ID(来自对象的 var_dump 抓取)和它拥有的键(这是等待子响应的每个 RPC 的 ID)。

问题说明如下:

  1. 在每个绿色环中,您可以看到我们引用了相同的对象,因为这是 PHP 提供的内部 ID 引用。在带有绿色环的第一行中,该对象具有它应具有的所有属性。

  2. 在每个红色环中是“失败”的 RPC 的 ID,因为在带有绿色环的第二行中,该对象神秘地清空了。

  3. 在这个过程的后期,在第三排的绿色环中,这个物体神奇地又恢复了它的所有属性。

笔记:

  • 这完全是随机发生的。
  • 使用数组时也会发生同样的情况(我最初使用数组而不是对象并尝试使用对象来查看它是否可以解决此问题)。
4

0 回答 0