加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php多线程并发是如何实现的

发布时间:2023-09-22 10:39:22 所属栏目:PHP教程 来源:
导读:java里多线程就是一个new thread的事情,php依赖apache靠着linux底层有一个多线程的办法。

今天说说如果你无法操控apache的服务器,如何模拟php并发:

<?php
if(function_exists(&#39;date_default_timezone_
java里多线程就是一个new thread的事情,php依赖apache靠着linux底层有一个多线程的办法。

今天说说如果你无法操控apache的服务器,如何模拟php并发:

<?php 
if(function_exists('date_default_timezone_set')) { 
    date_default_timezone_set('PRC'); 

 
function a() 

 $time = time(); 
 
 sleep(3); 
 $fp = fopen('result_a'.$time.'.log', 'w'); 
 fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn"); 
 fclose($fp); 

function b() 

 $time = time(); 
 
 sleep(3); 
 $fp = fopen('result_b'.$time.'.log', 'w'); 
 fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn"); 
 fclose($fp); 

 
if(!isset($_GET['act'])) $_GET['act'] = 'a'; 
//Cuoxin.com 
if($_GET['act'] == 'a') 

 a(); 

else if($_GET['act'] == 'b') b(); 
?> 
以上代码,在本地写入一个文件。

如果你访问 localhost/a.php 在两个浏览器标签尽可能快的同时打开,发现两个文件创建时间相差为3秒.

但是如果你访问localhost/a.php?act=b 另一个访问/a.php?act=a 你发现两个文件创建的时间几乎差不多。

对于apache来说同样的url意味着一个线程(我们或者说是进程),但是不同的URL意味着可以并发。

如果php内部有下载的动作:

function runThread() 

 down("http://localhost/test/a.php?act=a"); 

if($_GET['act'] == 'run') 

 echo 'start:'; 
 
 runThread(); 
 
 echo ' End'; 

http://localhost/test/a.php?act=run 
 
http://localhost/test/a.php?act=run&s=2 
只要主访问的url不同,则认为是不同的进行,意味着并发。文件创建时间不为3秒

本地有Linux服务器的朋友也可以借助linux来进行模拟并发:

<?php 
for ($i=0;$i<10;$i++) { 
echo $i; 
sleep(5); 

?> 
上面存成test.php, 然后写一段SHELL代码:

#!/bin/bash 
for i in 1 2 3 4 5 6 7 8 9 10 
do 
php -q test.php & 
done 
 

(编辑:汽车网)

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

    推荐文章