亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php三種實現多線程類似的方法

2024-05-04 23:39:59
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了php三種實現多線程類似的方法,需要的朋友可以參考下

1、curl_multi方法

當需要多線程的時候,可以用curl_multi一次性請求多個操作來完成,但curl走的是網絡通信,效率與可靠性就比較差了的。

 

 
  1. function main(){  
  2.  
  3. $sql = "select waybill_id,order_id from waybill where status>40 order by update_time desc limit 10 ";  
  4.  
  5. $data = Yii::app()->db->createCommand($sql)->queryAll(); //yii 框架格式  
  6.  
  7. foreach ($data as $k => $v) {  
  8.  
  9. if ($k % 2 == 0) { //偶數發一個網址  
  10.  
  11. $send_data[$k]['url'] = '';  
  12.  
  13. $send_data[$k]['body'] = $v['waybill_id'];  
  14.  
  15. else { //奇數發送另外一個網址  
  16. $send_data[$k]['url'] = 'http://www.abc.com';  
  17.  
  18. $send_data[$k]['body']=array($v['order_id'] => array('extra' => 16));  
  19.  
  20. }  
  21.  
  22. }  
  23.  
  24. $back_data =sendMulitRequest($send_data);  
  25.  
  26. var_dump($back_data);  
  27.  
  28. }  
  29. function sendMulitRequest($send_data){  
  30. $params = array();  
  31. $curl = $text = array();  
  32. $handle = curl_multi_init();  
  33.  
  34. foreach ($data as $k => $v) {  
  35.  
  36. if (empty($v['url'])) {  
  37.  
  38. $v['url'] = "http://www.xxx.com"; //if url is empty,set defalut url  
  39.  
  40. }  
  41.  
  42. $reqBody = json_encode($v['body']);  
  43.  
  44. $reqStream = array(  
  45.  
  46. 'body' => $reqBody,  
  47. );  
  48. $encRequest = base64_encode(json_encode($reqStream));  
  49. $params['data'] = $encRequest;  
  50. $curl[$k] = curl_init();  
  51. curl_setopt($curl[$k], CURLOPT_URL, $v['url']);  
  52. curl_setopt($curl[$k], CURLOPT_POST, TRUE);  
  53. curl_setopt($curl[$k], CURLOPT_HEADER, 0);  
  54. curl_setopt($curl[$k], CURLOPT_POSTFIELDS, http_build_query($params));  
  55. curl_setopt($curl[$k], CURLOPT_RETURNTRANSFER, 1);  
  56. curl_multi_add_handle($handle, $curl[$k]);  
  57. }  
  58. $active = null;  
  59.  
  60. do {  
  61.  
  62. $mrc = curl_multi_exec($handle, $active);  
  63.  
  64. while ($mrc == CURLM_CALL_MULTI_PERFORM);  
  65. while ($active && $mrc == CURLM_OK) {  
  66.  
  67. if (curl_multi_select($handle) != -1) {  
  68.  
  69. do {  
  70.  
  71. $mrc = curl_multi_exec($handle, $active);  
  72.  
  73. while ($mrc == CURLM_CALL_MULTI_PERFORM);  
  74.  
  75. }  
  76.  
  77. }  
  78. foreach ($curl as $k => $v) {  
  79. if (curl_error($curl[$k]) == "") {  
  80. $text[$k] = (string) curl_multi_getcontent($curl[$k]);  
  81. }  
  82. curl_multi_remove_handle($handle, $curl[$k]);  
  83. curl_close($curl[$k]);  
  84. }  
  85. curl_multi_close($handle);  
  86. return $text;  

2、通過stream_socket_client 方式

 

 
  1. function sendStream() {  
  2. $english_format_number = number_format($number, 4, '.''');  
  3.  
  4. echo $english_format_number;  
  5. exit();  
  6. $timeout = 10;  
  7. $result = array();  
  8. $sockets = array();  
  9. $convenient_read_block = 8192;  
  10. $host = "test.local.com";  
  11. $sql = "select waybill_id,order_id from xm_waybill where status>40 order by update_time desc limit 1 ";  
  12. $data = Yii::app()->db->createCommand($sql)->queryAll();  
  13. $id = 0;  
  14.  
  15. foreach ($data as $k => $v) {  
  16. if ($k % 2 == 0) {  
  17. $send_data[$k]['body'] = NoticeOrder::getSendData($v['waybill_id']);  
  18.  
  19. else {  
  20. $send_data[$k]['body'] = array($v['order_id'] => array('extra' => 16));  
  21. }  
  22. $data = json_encode($send_data[$k]['body']);  
  23. $s = stream_socket_client($host . ":80", $errno, $errstr, $timeout, STREAM_CLIENT_ASYNC_CONNECT | STREAM_CLIENT_CONNECT);  
  24. if ($s) {  
  25. $sockets[$id++] = $s;  
  26. $http_message = "GET /php/test.php?data=" . $data . " HTTP/1.0/r/nHost:" . $host . "/r/n/r/n";  
  27. fwrite($s, $http_message);  
  28. else {  
  29. echo "Stream " . $id . " failed to open correctly.";  
  30. }  
  31. }  
  32.  
  33. while (count($sockets)) {  
  34.  
  35. $read = $sockets;  
  36.  
  37. stream_select($read, $w = null, $e = null, $timeout);  
  38. if (count($read)) {  
  39. /* stream_select generally shuffles $read, so we need to  
  40. compute from which socket(s) we're reading. */ 
  41. foreach ($read as $r) {  
  42.  
  43. $id = array_search($r, $sockets);  
  44. $data = fread($r, $convenient_read_block);  
  45. if (strlen($data) == 0) {  
  46. echo "Stream " . $id . " closes at " . date('h:i:s') . ".<br> ";  
  47. fclose($r);  
  48. unset($sockets[$id]);  
  49. else {  
  50. $result[$id] = $data;  
  51. }  
  52. }  
  53. else {  
  54. /* A time-out means that *all* streams have failed  
  55. to receive a response. */ 
  56. echo "Time-out!/n";  
  57. break;  
  58. }  
  59. }  
  60. print_r($result);  
  61.  

3、通過多進程代替多線程

 

 
  1. function daemon($func_name,$args,$number){  
  2. while(true){  
  3. $pid=pcntl_fork();  
  4. if($pid==-1){  
  5. echo "fork process fail";  
  6. exit();  
  7. }elseif($pid){//創建的子進程  
  8.  
  9. static $num=0;  
  10. $num++;  
  11. if($num>=$number){  
  12. //當進程數量達到一定數量時候,就對子進程進行回收。  
  13. pcntl_wait($status);  
  14.  
  15. $num--;  
  16. }  
  17. }else//為0 則代表是子進程創建的,則直接進入工作狀態  
  18.  
  19. if(function_exists($func_name)){  
  20. while (true) {  
  21. $ppid=posix_getpid();  
  22. var_dump($ppid);  
  23. call_user_func_array($func_name,$args);  
  24. sleep(2);  
  25. }  
  26. }else{  
  27. echo "function is not exists";  
  28. }  
  29. exit();  
  30. }  
  31. }  
  32. }  
  33. function worker($args){  
  34. //do something  
  35.  
  36. }  
  37. daemon('worker',array(1),2);  

以上就是為大家分享的三種php實現多線程類似的方法,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产中文字幕91| 亚洲欧美日韩高清| 亚洲欧美一区二区三区四区| 久久精品国产成人| 欧美最近摘花xxxx摘花| 国产精品日韩欧美综合| 亚洲色图15p| 中文字幕在线日韩| 色无极亚洲影院| 日韩久久精品电影| 欧美性生交大片免费| 国产精品h片在线播放| 欧美自拍视频在线| 亚洲国产精品免费| 久久精品视频播放| 一区二区亚洲欧洲国产日韩| 97视频在线免费观看| 欧美精品电影免费在线观看| 国产精品免费久久久| 一区三区二区视频| 成人免费高清完整版在线观看| 欧美大片免费观看在线观看网站推荐| 最近的2019中文字幕免费一页| 亚洲国产精品久久久久秋霞不卡| 91在线|亚洲| 国产美女主播一区| 91视频免费网站| 伦理中文字幕亚洲| 亚洲天天在线日亚洲洲精| 欧美极度另类性三渗透| 日韩中文在线观看| 精品国模在线视频| 成人午夜在线观看| 日韩黄色在线免费观看| 国产精品福利小视频| 国产精品视频永久免费播放| 91在线网站视频| 亚洲成人精品视频| 精品无码久久久久久国产| 疯狂蹂躏欧美一区二区精品| 欧美性在线观看| 国产成人精品电影| 亚洲自拍小视频| 97视频网站入口| 91色中文字幕| 色妞色视频一区二区三区四区| 成人欧美一区二区三区在线| 91九色精品视频| 日本精品久久久久影院| 久久免费成人精品视频| 亚洲成人亚洲激情| 欧美另类极品videosbest最新版本| 欧美裸体xxxx极品少妇| xxxxx成人.com| 亚洲国产又黄又爽女人高潮的| 国产欧美一区二区| 在线色欧美三级视频| 欧美激情国产日韩精品一区18| 91精品久久久久久久久不口人| 亚洲综合社区网| 97国产精品人人爽人人做| 91久久精品美女| 在线视频一区二区| 中文字幕亚洲欧美日韩高清| 国产精品wwww| 久久久久亚洲精品成人网小说| 久久久精品亚洲| 在线亚洲男人天堂| 亚洲精品v天堂中文字幕| 中文字幕日韩精品有码视频| 国产精品久久一| 成人午夜两性视频| 国产精品久久久久久久久久三级| 国产z一区二区三区| 午夜精品蜜臀一区二区三区免费| 色噜噜狠狠狠综合曰曰曰| 国产精品美腿一区在线看| 亚洲欧美精品一区| 久久久爽爽爽美女图片| 午夜免费在线观看精品视频| 欧美精品在线观看91| 亚洲伊人久久大香线蕉av| 91精品中国老女人| 欧美老肥婆性猛交视频| 国产精品一区二区性色av| 夜夜嗨av色一区二区不卡| 国产精品igao视频| 91日韩在线播放| 欧美成人午夜视频| 精品国产欧美一区二区三区成人| 久久精品中文字幕电影| 国模精品一区二区三区色天香| 国内精品免费午夜毛片| 欧美电影《睫毛膏》| 日韩精品极品毛片系列视频| 精品国产一区二区三区久久狼黑人| 色婷婷av一区二区三区在线观看| 日韩成人中文字幕在线观看| 国产亚洲激情在线| 中文日韩电影网站| 国产精品久久电影观看| 欧美成人精品一区二区三区| 91久久在线视频| 欧美日韩亚洲高清| 亚洲最大av网| 色偷偷噜噜噜亚洲男人的天堂| 亚洲精品美女在线观看| 国产91热爆ts人妖在线| 日韩国产中文字幕| 日韩**中文字幕毛片| 亚洲国产精品va| 亚洲精品天天看| 久久国产精品久久久久久久久久| 奇米影视亚洲狠狠色| 97精品国产97久久久久久春色| 中文字幕久热精品视频在线| 91精品久久久久久| 日韩久久免费电影| 91久久国产综合久久91精品网站| 国产视频精品va久久久久久| 欧美电影免费播放| 俺去了亚洲欧美日韩| 日本精品在线视频| 国产在线观看精品一区二区三区| 国产精品视频久久久久| 日韩在线欧美在线国产在线| 久久精品在线播放| 97成人在线视频| 欧洲成人免费aa| 亚洲人成77777在线观看网| 欧美性视频网站| 国产成人精品最新| 国产欧美日韩精品专区| 日韩在线免费av| 日韩欧美精品在线观看| 国产日韩欧美日韩大片| 久久精品中文字幕一区| 国产免费一区视频观看免费| 最近2019免费中文字幕视频三| 亚洲美女在线观看| 日韩中文字幕在线精品| 91人成网站www| 亚洲春色另类小说| 亚洲最大福利视频网| 欧洲精品毛片网站| 亚洲天堂成人在线视频| 亚洲视频999| 国产精品日韩专区| 久久久精品一区二区三区| 中文字幕日韩欧美精品在线观看| 国产日本欧美一区二区三区| 国产精品电影在线观看| 精品国产31久久久久久| 97在线观看免费高清| 精品偷拍各种wc美女嘘嘘| 国产aⅴ夜夜欢一区二区三区| 九九热99久久久国产盗摄| 亚洲国产精品国自产拍av秋霞| 亚洲桃花岛网站| 欧美综合在线第二页| 成人妇女免费播放久久久| 欧洲中文字幕国产精品| 国产精品视频免费观看www| 亚洲精品成人久久电影|