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

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

是否有一种实际的方法在PHP中实现多线程模型,无论是真实的,还是仅仅模拟它。一段时间以前,有人建议您可以强制操作系统加载PHP可执行文件的另一个实例,并处理其他同时进行的进程。

这方面的问题是,当PHP代码完成执行时,PHP实例将保留在内存中,因为无法从PHP中杀死它。所以,如果你在模拟几个线程,你可以想象会发生什么。因此,我仍然在寻找一种方法,多线程可以有效地完成或模拟内PHP。有什么想法吗?


慕妹3242003
浏览 572回答 3
3回答

素胚勾勒不出你

你为什么不用波芬?for&nbsp;($i=0;&nbsp;$i<10;&nbsp;$i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;open&nbsp;ten&nbsp;processes &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($j=0;&nbsp;$j<10;&nbsp;$j++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$pipe[$j]&nbsp;=&nbsp;popen('script2.php',&nbsp;'w'); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;wait&nbsp;for&nbsp;them&nbsp;to&nbsp;finish &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($j=0;&nbsp;$j<10;&nbsp;++$j)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pclose($pipe[$j]); &nbsp;&nbsp;&nbsp;&nbsp;}}

江户川乱折腾

线程在普通PHP中是不可用的,但是通过使用HTTP请求作为异步调用,并发编程是可能的。将curl的超时设置为1,并对希望相互关联的进程使用相同的Session_id,您可以与会话变量进行通信,如下面的示例所示。使用此方法,您甚至可以关闭浏览器,并且并发进程仍然存在于服务器上。不要忘记验证正确的会话ID,如下所示:http:/localhost/test/verifysession.php?sessionid=[正确身份证]startprocess.php$request&nbsp;=&nbsp;"http://localhost/test/process1.php?sessionid=".$_REQUEST["PHPSESSID"];$ch&nbsp;=&nbsp;curl_init();curl_setopt($ch,&nbsp;CURLOPT_URL,&nbsp;$request); curl_setopt($ch,&nbsp;CURLOPT_RETURNTRANSFER,&nbsp;true);curl_setopt($ch,&nbsp;CURLOPT_TIMEOUT,&nbsp;1);curl_exec($ch);curl_close($ch);echo&nbsp;$_REQUEST["PHPSESSID"];process1.phpset_time_limit(0);if&nbsp;($_REQUEST["sessionid"]) &nbsp;&nbsp;&nbsp;session_id($_REQUEST["sessionid"]);function&nbsp;checkclose(){ &nbsp;&nbsp;&nbsp;global&nbsp;$_SESSION; &nbsp;&nbsp;&nbsp;if&nbsp;($_SESSION["closesession"]) &nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset($_SESSION["closesession"]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die(); &nbsp;&nbsp;&nbsp;}}while(!$close){ &nbsp;&nbsp;&nbsp;session_start(); &nbsp;&nbsp;&nbsp;$_SESSION["test"]&nbsp;=&nbsp;rand(); &nbsp;&nbsp;&nbsp;checkclose(); &nbsp;&nbsp;&nbsp;session_write_close(); &nbsp;&nbsp;&nbsp;sleep(5);}verifysession.phpif&nbsp;($_REQUEST["sessionid"]) &nbsp;&nbsp;&nbsp;&nbsp;session_id($_REQUEST["sessionid"]);session_start();var_dump($_SESSION);closeprocess.phpif&nbsp;($_REQUEST["sessionid"]) &nbsp;&nbsp;&nbsp;&nbsp;session_id($_REQUEST["sessionid"]);session_start();$_SESSION["closesession"]&nbsp;=&nbsp;true;var_dump($_SESSION);
打开App,查看更多内容
随时随地看视频慕课网APP