发布于 1970-01-01 08:00
  • 3 个回答
    • 个人觉得pthreads这个扩展不适合应用在Apache/PHP-FPM这些Web服务上,因为这些服务本身就有自己的进程管理模型.在CLI下使用pthreads可能更好些.还有,需要注意的是,不要在线程里使用echo输出内容,否则会出现不可预知的错误和行为,比如乱码(garbled).尤其是在非CLI环境下,比如Apache/PHP-FPM.另外,我在Ubuntu上用Nginx+PHP-FPM跑下面的多线程程序,是能正常运行的:

      <?php
      header('Content-Type: text/html; charset=utf-8');
      ob_start();
      function do_flush() {
          echo '<br />'.str_repeat(' ', 1024*4);
          ob_flush();
          flush();
      }
      class Request extends Thread {
          public $url;
          public $data;
          public function __construct($url) {
              $this->url = $url;
          }
          public function run() {
              // 线程处理一个耗时5秒的任务
              for($i=0;$i<5;$i++) {
                  //不要在线程里使用echo输出内容
                  //echo '线程: '.date('H:i:s')."\n";
                  //do_flush();
                  //sleep(1);
              }
              $response = file_get_contents($this->url);
              $response = $this->url;
              if ($response) {
                  $this->data = array($response);
              }
              //echo "线程: 任务完成<br />";
          }
      }
      $request = new Request('hello.html');
      // 运行线程:start()方法会触发run()运行
      if ($request->start()) {
          // 主进程处理一个耗时10秒的任务,此时线程已经工作
          for($i=0;$i<10;$i++) {
              echo '进程: '.date('H:i:s')."\n";
              do_flush();
              sleep(1);
          }
      }
      
      // 同步线程并输出线程返回的数据
      $request->join();
      echo '线程返回数据: '.$request->data[0];
      ob_end_flush();
      2022-12-01 13:16 回答
    • 加载pthreads插件必须要求php是 ZTS Enabled ( Thread Safety ) 版,请自行检查相关版本

      2022-12-01 13:16 回答
    • 我将环境整体换了一下 apache2.4 php 5.6 ts-x64 threads 扩展 正常添加了

      2022-12-01 13:16 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有