对象临时清空引用之间

时间:2013-11-08 16:21:15

标签: php asynchronous libev

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

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

Script trace

  • 蓝色行表示父成功和发送的位置 收到回复。
  • 红色行表示父母的位置 成功发送并收到回复,但收到后 响应,父对象中包含代表的对象 RPC是神秘的“空”,所以应该采取的行动 无法调用与该RPC响应关联的,因为无法引用它。
  • 显示每个成功或失败之前的黄金行,显示包含等待响应的所有RPC的对象的状态。该行包含对象ID(来自对象的var_dump)以及它具有的键(它们是等待来自子进程的响应的每个RPC的ID)。

问题说明如下:

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

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

  3. 稍后在这个过程中,在带有绿色环的第三行中,该对象神奇地重新拥有其所有属性。

  4. 注意:

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

0 个答案:

没有答案