深入分析PHP中的伪多线程与多进程
发布时间:2022-07-20 12:47 所属栏目:121 来源:互联网
导读:本篇文章是对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]) 来控制子进程实际运行的代码段。 更详细的研究出于时间关系,暂时没有进行,你可以参考我给出的手册的链接。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读