




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
PHP实现多线程的方法 非淡泊无以明志,非宁静无以致远。以下是小编为大家搜索整理PHP实现多线程的方法,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网! PHP+shell实现多线程的方法 先写个简单的php代码,这里为了让脚本执行时间更长,方便看效果,sleep一下,呵呵!先看下test.php的代码:ls PHP代码: for($i=0;$i echo$i; sleep(10); } ?> 在看下shell脚本的代码,非常简单 #!/bin/bash foriin12345678910 do /usr/bin/php-q/var/www/html/test.php& done 注意到在请求php代码的那行有一个&符号吗,这个是关键,不加的话是不能进行多线程的,&表示讲服务推送到后台执行,因此,在shell的每次的循环中不必等php的代码全部执行完在请求下一个文件,而是同时进行的,这样就实现了多线程,下面运行下shell看下效果,这里你将看到10个test.php进程再跑,再利用linux的定时器,定时请求这个shell,在处理一些需要多线程的任务,例如,批量下载时,非常好用! php中用WEB服务器实现多线程 假设我们现在运行的是a.php这个文件.但是我在程序中又请求WEB服务器运行另一个b.php,那么这两个文件将是同时执行的.(PS:一个链接请求发送之后,WEB服务器就会执行它,而不管客户端是否已经退出) 有些时候,我们想运行的不是另一个文件,而是本文件中的一部分代码.该怎么办呢? 其实可是通过参数来控制a.php来运行哪一段程序. 下面看一个例子: //a.php,b.php PHP代码:-------------------------------------------------------------------------------- functionrunThread() { $fp=fsockopen('localhost',80,$errno,$errmsg); fputs($fp,"GET/b.php?act=brnrn");//这里的第二个参数是HTTP协议中规定的请求头 //不明白的请看RFC中的定义 fclose($fp); } functiona() { $fp=fopen('result_a.log','w'); fputs($fp,'Setin'.Date('h:i:s',time()).(double)microtime()."rn"); fclose($fp); } functionb() { $fp=fopen('result_b.log','w'); fputs($fp,'Setin'.Date('h:i:s',time()).(double)microtime()."rn"); fclose($fp); } if(!isset($_GET['act']))$_GET['act']='a'; if($_GET['act']=='a') { runThread(); a(); } elseif($_GET['act']=='b')b(); ?> -------------------------------------------------------------------------------- 打开result_a.log和result_b.log比较一下两个文件的中访问的时间.大家会发现,这两个的确是在不同线程中运行的.有些时间完全一样. 上面只是一个简单的例子,大家可以改进成其它形式. 既然PHP中也能多线程了,那么问题也来了,那就是同步的问题.我们知道PHP本身是不支持多线程的.所以更不会有什么像Java中synchronize的方法了.那我们该如何做呢. 1.尽量不访问同一个资源.以避免冲突.但是可以同时像数据库操作.因为数据库是支持并发操作的.所以在多线程的PHP中不要向同一个文件中写入数据.如果必须要写的话,用别的方法进行同步..如调用flock对文件进行加锁等.或建立临时文件并在另外的线程中等待这个文件的消失while(file_exits('xxx'));这样就等于这个临时文件存在时,表示其实线程正在操作 如果没有了这个文件,说明其它线程已经释放了这个. 2.尽量不要从runThread在执行fputs后取这个socket中读取数据.因为要实现多线程,需要的用非阻塞模式.即在像fgets这样的函数时立即返回..所以读写数据就会出问题.如果使用阻塞模式的话,程序就不算是多线程了.他要等上面的返回才执行下面的程序.所以如果需要交换数据最后利用外面文件或数据中完成.实在想要的话就用socket_set_nonblock($fp)来实现.

一吃****仕龙
实名认证
内容提供者


最近下载
贵州省城市管理行政执法条例.doc
贵州省城市管理行政执法条例.doc
一种基于双轨缆道的牵引式雷达波在线测流系统.pdf
一种基于双轨缆道的牵引式雷达波在线测流系统.pdf
一种胃肠道超声检查助显剂及其制备方法.pdf
201651206021+莫武林+浅析在互联网时代下酒店的营销策略——以湛江民大喜来登酒店为例.doc
201651206021+莫武林+浅析在互联网时代下酒店的营销策略——以湛江民大喜来登酒店为例.doc
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf