为了账号安全,请及时绑定邮箱和手机立即绑定

如何在PHP应用程序中使用多线程

如何在PHP应用程序中使用多线程

PHP
慕妹3242003 2019-06-05 11:03:27
如何在PHP应用程序中使用多线程是否有一种实际的方法在PHP中实现多线程模型,无论是真实的,还是仅仅模拟它。一段时间以前,有人建议您可以强制操作系统加载PHP可执行文件的另一个实例,并处理其他同时进行的进程。这方面的问题是,当PHP代码完成执行时,PHP实例将保留在内存中,因为无法从PHP中杀死它。所以,如果你在模拟几个线程,你可以想象会发生什么。因此,我仍然在寻找一种方法,多线程可以有效地完成或模拟内PHP。有什么想法吗?
查看完整描述

3 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

你为什么不用波芬?

for ($i=0; $i<10; $i++) {
    // open ten processes
    for ($j=0; $j<10; $j++) {
        $pipe[$j] = popen('script2.php', 'w');
    }

    // wait for them to finish
    for ($j=0; $j<10; ++$j) {
        pclose($pipe[$j]);
    }}


查看完整回答
反对 回复 2019-06-05
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

线程在普通PHP中是不可用的,但是通过使用HTTP请求作为异步调用,并发编程是可能的。

将curl的超时设置为1,并对希望相互关联的进程使用相同的Session_id,您可以与会话变量进行通信,如下面的示例所示。使用此方法,您甚至可以关闭浏览器,并且并发进程仍然存在于服务器上。

不要忘记验证正确的会话ID,如下所示:

http:/localhost/test/verifysession.php?sessionid=[正确身份证]

startprocess.php

$request = "http://localhost/test/process1.php?sessionid=".$_REQUEST["PHPSESSID"];$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_TIMEOUT, 1);curl_exec($ch);curl_close($ch);echo $_REQUEST["PHPSESSID"];

process1.php

set_time_limit(0);if ($_REQUEST["sessionid"])
   session_id($_REQUEST["sessionid"]);function checkclose(){
   global $_SESSION;
   if ($_SESSION["closesession"])
   {
       unset($_SESSION["closesession"]);
       die();
   }}while(!$close){
   session_start();
   $_SESSION["test"] = rand();
   checkclose();
   session_write_close();
   sleep(5);}

verifysession.php

if ($_REQUEST["sessionid"])
    session_id($_REQUEST["sessionid"]);session_start();var_dump($_SESSION);

closeprocess.php

if ($_REQUEST["sessionid"])
    session_id($_REQUEST["sessionid"]);session_start();$_SESSION["closesession"] = true;var_dump($_SESSION);


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 571 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信