php多线程有几种实现方法

php多线程有几种实现方法

内容导读

收集整理的这篇技术教程文章主要介绍了php多线程有几种实现方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2387字,纯文字阅读大概需要4分钟

内容图文

1、curl_multi方法

当需要多线程的时候,可以用curl_multi一次性请求多个操作来完成,但curl走的是网络通信,效率与可靠性就比较差了的。

function main(){

 $sql = "select waybill_id,order_id from waybill where status>40 order by update_time desc limit 10 ";


$data = Yii::app()->db->createCommand($sql)->queryAll(); //yii 框架格式


foreach ($data as $k => $v) {



 if ($k % 2 == 0) { //偶数发一个网址




$send_data[$k]['url'] = '';




$send_data[$k]['body'] = $v['waybill_id'];



} else { //奇数发送另外一个网址



 $send_data[$k]['url'] = 'http://www.abc.com';




$send_data[$k]['body']=array($v['order_id'] => array('extra' => 16));


 }

 }

}

2、通过stream_socket_client 方式

function sendStream() {

 $english_format_number = number_format($number, 4, '.', '');


echo $english_format_number;


exit();

 $timeout = 10;

 $result = array();

 $sockets = array();

 $convenient_read_block = 8192;

 $host = "test.local.com";

 $sql = "select waybill_id,order_id from xm_waybill where status>40 order by update_time desc limit 1 ";


$data = Yii::app()->db->createCommand($sql)->queryAll();

 $id = 0;


foreach ($data as $k => $v) {


 if ($k % 2 == 0) {



 $send_data[$k]['body'] = NoticeOrder::getSendData($v['waybill_id']);



} else {



 $send_data[$k]['body'] = array($v['order_id'] => array('extra' => 16));



}



$data = json_encode($send_data[$k]['body']);


 $s = stream_socket_client($host . ":80", $errno, $errstr, $timeout, STREAM_CLIENT_ASYNC_CONNECT | STREAM_CLIENT_CONNECT);


 if ($s) {




$sockets[$id++] = $s;



 $http_message = "GET /php/test.php?data=" . $data . " HTTP/1.0rnHost:" . $host . "rnrn";




fwrite($s, $http_message);


 } else {




echo "Stream " . $id . " failed to open correctly.";


 }


}
}

3、通过多进程代替多线程

function daemon($func_name,$args,$number){
 while(true){

 $pid=pcntl_fork();

 if($pid==-1){


 echo "fork process fail";


 exit();

 }elseif($pid){//创建的子进程



static $num=0;


 $num++;


 if($num>=$number){



 //当进程数量达到一定数量时候,就对子进程进行回收。



 pcntl_wait($status);




$num--;


 }


}else{ //为0 则代表是子进程创建的,则直接进入工作状态



if(function_exists($func_name)){



 while (true) {




 $ppid=posix_getpid();




 var_dump($ppid);




 call_user_func_array($func_name,$args);




 sleep(2);



 }


 }else{



 echo "function is not exists";


 }


 exit();


 }
 } }
function worker($args){

//do something
}
daemon('worker',array(1),2);

推荐教程:PHP视频教程

以上就是php多线程有几种实现方法的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php多线程有几种实现方法全部内容,希望文章能够帮你解决php多线程有几种实现方法所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com