php 使用pThread还是阻塞

问题描述

php某些接口被调用可能要消耗很长时间,希望异步来解决,所以想到通过多线程的方式来解决。Google到了pThread,安装后查阅了readme.MD中的sample代码。在不join的情况下仍旧是阻塞的。

问题出现的环境背景及自己尝试过哪些方法

官方readme.MD中的sample代码,经常尝试发现是阻塞的,那这thread还有意义吗?如何解决,希望异步解决。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
这是官方sample代码

class AsyncOperation extends Thread {
  public function __construct($arg){
    $this->arg = $arg;
  }

  public function run(){
    if($this->arg){
      sleep(5);
      printf("Hello %s\n", $this->arg);
    }
  }
}


$thread = new AsyncOperation("World1");

if($thread->start())
  $thread->join();

这是我修改后的代码

class AsyncOperation extends Thread {
  public function __construct($arg){
    $this->arg = $arg;
  }

  public function run(){
    if($this->arg){
      sleep(5);
      // do something
      printf("Hello %s\n", $this->arg);
    }
  }
}


$thread = new AsyncOperation("World1");
$thread->start();
echo 1111;

你期待的结果是什么?实际看到的错误信息又是什么?

我期望的结果是页面打印完1111就结束, do something在不join的情况下,子线程单独处理,结束后自行关闭。

阅读 2.6k
2 个回答

后续将//do somthing中的代码更替成文件转换代码,经测试发现并没任何问题,即使访问中断,子线程的内容也是会继续执行下去的,之所以感觉会发生阻塞行为是因为页面的特性造成的,相当于在等待回调。页面最终输出相当于回调完成。

有木有听过消息队列?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题