加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

深入分析PHP中的伪多线程与多进程

发布时间:2022-07-21 19:16:56 所属栏目:PHP教程 来源:互联网
导读:本篇文章是对PHP中的(伪)多线程与多进程进行了详细的分析介绍,需要的朋友参考下 (伪)多线程:借助外力 利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序。 QUOTE: 我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是
  本篇文章是对PHP中的(伪)多线程与多进程进行了详细的分析介绍,需要的朋友参考下
 
  (伪)多线程:借助外力
 
  利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序。
 
  QUOTE:
 
  我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的.
 
  也就是说可以同时让多人一起访问. 这也是我在PHP中实现多线程的基础.
 
  假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php
 
  那么这两个文件将是同时执行的.
 
  (PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出)
 
  有些时候, 我们想运行的不是另一个文件, 而是本文件中的一部分代码.该怎么办呢?
 
  其实可是通过参数来控制a.php来运行哪一段程序.
 
  下面看一个例子:
 
  复制代码 代码如下:
 
  <?php
 
  function runThread(){
 
  $fp = fsockopen('localhost', 80, $errno, $errmsg);
 
  fputs($fp, "GET /a.php?act=brnrn");//这里的第二个参数是HTTP协议中规定的请求头,不明白的请看RFC中的定义
 
  fclose($fp);
 
  }
 
  function a(){
 
  $fp = fopen('result_a.log', 'w');
 
  fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");

  如果$bWaitFlag=TURE,则结果如下:
 
  CODE:[Copy toclipboard][qiao@oicq qiao]$ phptest.php
 
  Start
 
  0 -> 1133503602
 
  wait 0 -> 1133503602
 
  1 -> 1133503603 *
 
  wait 1 -> 1133503603
 
  2 -> 1133503604 **
 
  wait 2 -> 1133503604
 
  3 -> 1133503605 ***
 
  wait 3 -> 1133503605
 
  4 -> 1133503606 ****
 
  wait 4 -> 1133503606
 
  5 -> 1133503607 *****
 
  wait 5 -> 1133503607
 
  6 -> 1133503608 ******
 
  wait 6 -> 1133503608
 
  7 -> 1133503609 *******
 
  wait 7 -> 1133503609
 
  8 -> 1133503610 ********
 
  wait 8 -> 1133503610
 
  9 -> 1133503611 *********
 
  wait 9 -> 1133503611
 
  End
 
  [qiao@oicq qiao]$
 
  从 多进程的例子可以看出,使用pcntl_fork()之后,将生成一个子进程,而且子进程运行的代码,从pcntl_fork()之后的代码开始,而子进 程不继承父进程的数据信息(实际上是把父进程的数据做了一个全新的拷贝),因而使用if(!$pids[$i]) 来控制子进程实际运行的代码段。
 
  更详细的研究出于时间关系,暂时没有进行,你可以参考我给出的手册的链接。
 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读