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

首頁 > 語言 > PHP > 正文

PHP多進程并發控制的測試用例

2024-09-04 11:50:12
字體:
來源:轉載
供稿:網友

  [文章作者:張宴 本文版本:v1.0 最后修改:2007.11.16 轉載請注明出處:http://blog.s135.com]

  最近遇到一個問題,Linux下的PHP命令行程序作為守護進程,需要從隊列文件中讀一行數據,通過TCP協議發送給外地的接收服務器,再讀下一行數據,再發送。當本地與外地的網絡狀況不好時,有時候發送一條數據所耗費的時間就較長,累積起來容易造成隊列堵塞和延遲。

  于是,我準備用該PHP命令行程序生成多個子進程,將串行處理變成并行處理。最簡單的方法就是在PHP中用exec()或popen()函數將一個shell命令行推到后臺去執行,例如:

<?php
exec("/bin/sh /opt/zhangyan.sh &");
?>
  最后的&表示將shell腳本推到后臺去執行。

  但是這樣會有一個問題,如果推到后臺的進程太多,可能會導致服務器系統資源耗盡而崩潰,所以必須控制進程數量。



  我寫了一個PHP程序(/opt/zhangyan.php)、一個shell程序(/opt/zhangyan.sh)作為測試用例。

  程序的邏輯:
  1、設置/opt/zhangyan.php最多允許生成500個子進程;
  2、當/opt/zhangyan.php讀取到一條數據后,將允許生成的子進程數減1(空閑進程數$p_number=500-1=499),然后將數據交給/opt/zhangyan.sh去后臺處理,不等待/opt/zhangyan.sh處理結束,繼續讀取下一條數據;
  3、當允許生成的子進程數減至0時(空閑進程數$p_number=0),/opt/zhangyan.php會等待1秒鐘,然后檢查后臺還有多少個/opt/zhangyan.sh子進程尚未處理結束;
  4、如果1秒鐘之后/opt/zhangyan.php發現后臺的/opt/zhangyan.sh子進程數還是500(空閑進程數$p_number=0),會繼續等待1秒鐘,如此反復;
  5、如果/opt/zhangyan.php發現后臺尚未處理結束的/opt/zhangyan.sh子進程數減少到300個了(空閑進程數$p_number=500-300=200),那么/opt/zhangyan.php會再往后臺推送200個/opt/zhangyan.sh子進程;



/opt/zhangyan.php代碼如下:
  1. <?php   
  2. function run($input)   
  3. {   
  4.     global $p_number;   
  5.     if ($p_number <= 0)   
  6.     {   
  7.         $p_number = worker_processes($p_number);   
  8.     }   
  9.     $p_number = $p_number - 1;   
  10.     $out = popen("/bin/sh /opt/zhangyan.sh ""{$input}"" &""r");   
  11.     pclose($out);   
  12. }   
  13.   
  14. function worker_processes($p_number)   
  15. {   
  16.     $limit = 500;//允許推到后臺的最大進程數   
  17.     while ($p_number <= 0)   
  18.     {   
  19.         $cmd = popen("ps -ef | grep ""/opt/zhangyan.sh"" | grep -v grep | wc -l""r");   
  20.         $line = fread($cmd, 512);   
  21.         pclose($cmd);   
  22.         $p_number = $limit - $line;   
  23.         if ($p_number <= 0)   
  24.         {   
  25.             sleep(1);//暫停1秒鐘   
  26.         }   
  27.     }   
  28.     return $p_number;   
  29. }   
  30.   
  31. $input = "http://blog.s135.com"; //模擬從隊列文件中讀取到的數據   
  32. for ($i = 1; $i <= 1000; $i++)   
  33. {   
  34.     run($input);   
  35.     echo "Idle process number: " . $p_number . "";   
  36. }   
  37. ?>  
 ?。?opt/zhangyan.php程序用來模擬從隊列文件中讀取1000行數據,交給子進程/opt/zhangyan.sh去處理。)



/opt/zhangyan.sh代碼如下:
  1. #!/bin/sh   
  2. echo $(date -d "today" +"%Y-%m-%d %H:%M:%S"$1 >> /opt/zhangyan.log   
  3. sleep_time=$(expr $RANDOM % 4 + 1)   
  4. sleep $sleep_time  
  (/opt/zhangyan.sh腳本用來模擬向外地接收服務器發送數據。其中的$(expr $RANDOM % 4 + 1)用來生成1~5之間的隨機數,用來使程序暫停1~5秒鐘。暫停1秒表示網絡狀況好,發送數據順暢;暫停2~6秒表示網絡狀況不好,發送過程需要1~5秒。)



 執行程序:
/usr/local/php/bin/php /opt/zhangyan.php

?。?usr/local/php/bin/php因PHP解析器所在的路徑)

 查看/opt/zhangyan.sh打下的日志文件的第一行和最后一行:
head -n 1 /opt/zhangyan.log
 2007-11-16 07:54:13 http://blog.s135.com
tail -n 1 /opt/zhangyan.log
 2007-11-16 07:54:18 http://blog.s135.com

  可以看出,500進程并發處理這1000條數據只耗費5秒鐘。而按照原來的串行模式,處理每條數據即使只耗費最短的1秒鐘,也需要1000秒,約合16分鐘才能完成。



 PS:將PHP程序作為Linux守護進程的方法:
nohup /usr/local/php/bin/php /opt/zhangyan.php 2>&1 > /dev/null &

?。╪ohup命令可以在用戶退出終端后仍然執行程序,“2>&1 > /dev/null”表示不顯示標準輸出和錯誤輸出,最后的&表示推到后臺執行。)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲一区二区三区四区五区| 美女视频久久黄| 精品国产一区二区三区久久狼5月| 91高清视频在线免费观看| 精品国产乱码久久久久久虫虫漫画| 国产精品久久久av久久久| 精品亚洲aⅴ在线观看| 国产精品久久久久久久久免费| 色yeye香蕉凹凸一区二区av| 日韩激情av在线免费观看| 欧美又大又硬又粗bbbbb| 欧美午夜久久久| 亚洲男人天堂2019| 精品国产1区2区| 亚洲精品免费在线视频| 亚洲精品久久久一区二区三区| 欧美肥婆姓交大片| 成人免费视频在线观看超级碰| 日韩av在线看| 亚洲的天堂在线中文字幕| 欧美性少妇18aaaa视频| 久久久亚洲欧洲日产国码aⅴ| 成人午夜黄色影院| 国产精品视频导航| 欧美国产日本高清在线| 奇米一区二区三区四区久久| 久久免费福利视频| 日本最新高清不卡中文字幕| 欧美另类精品xxxx孕妇| 欧美性做爰毛片| 久久成人精品视频| 中文字幕亚洲国产| 久久777国产线看观看精品| 亚洲国产日韩欧美在线图片| 久久精视频免费在线久久完整在线看| 97福利一区二区| 2019中文在线观看| 国产在线一区二区三区| 欧美精品久久久久久久久久| 国产丝袜一区二区三区免费视频| 国产精品尤物福利片在线观看| 欧美一区二区影院| 国产偷国产偷亚洲清高网站| 精品美女久久久久久免费| 美女999久久久精品视频| 九九热精品视频| 国产精品黄页免费高清在线观看| 国产亚洲视频在线观看| 高清日韩电视剧大全免费播放在线观看| 91午夜理伦私人影院| 最近2019中文字幕mv免费看| 亚洲精品久久久久中文字幕欢迎你| 在线激情影院一区| 欧美与黑人午夜性猛交久久久| 亚洲自拍在线观看| 精品国产一区久久久| 亚洲精品短视频| 亚洲欧洲高清在线| 国产精品免费电影| 欧美性猛交xxxx富婆| 黄色成人av网| 久久精品国产2020观看福利| 欧美精品www在线观看| 欧美综合一区第一页| 日韩精品中文在线观看| 亚洲精品丝袜日韩| 国产日韩欧美在线观看| 国产日韩在线看片| 欧美激情一区二区三区高清视频| 亚洲精品按摩视频| 国产精品男女猛烈高潮激情| 奇米成人av国产一区二区三区| 日韩色av导航| 国产精品久久综合av爱欲tv| 欧美中在线观看| 亚洲第一综合天堂另类专| 日韩av综合中文字幕| 亚洲天堂成人在线视频| 亚洲人成在线观看网站高清| 97免费视频在线| 成人女保姆的销魂服务| 国产欧美日韩91| 国产精品九九久久久久久久| 亚洲iv一区二区三区| 亚洲高清免费观看高清完整版| 欧美日韩国产精品一区二区三区四区| 欧美精品精品精品精品免费| 中文字幕在线成人| 亚洲无av在线中文字幕| 久久精品中文字幕免费mv| 日本中文字幕成人| 欧美日韩国产中文字幕| 精品成人国产在线观看男人呻吟| 欧美日本啪啪无遮挡网站| 欧美精品一区二区免费| 亚洲伊人成综合成人网| 欧美在线一级va免费观看| 精品视频偷偷看在线观看| 亚洲在线观看视频网站| 亚洲欧洲免费视频| 久久久久成人精品| 国产视频精品自拍| 欧美激情视频一区二区| 久久99久久久久久久噜噜| 成人有码在线播放| 日韩hd视频在线观看| 国产视频久久久久| 亚州欧美日韩中文视频| 日韩av影片在线观看| 国产精品爽爽爽爽爽爽在线观看| 成人在线视频网| 日韩美女写真福利在线观看| 亚洲国产精品成人av| 亚洲一区美女视频在线观看免费| 欧美插天视频在线播放| 日韩在线观看免费高清完整版| 中文字幕精品网| 国产伊人精品在线| 午夜精品久久久久久久99热浪潮| 美女扒开尿口让男人操亚洲视频网站| 国产精品视频大全| 91日本在线观看| 欧美国产在线电影| 亚洲欧美日韩国产中文专区| 性欧美亚洲xxxx乳在线观看| 日本成熟性欧美| 国产成人精品av在线| 久久久久久一区二区三区| 欧美在线欧美在线| 成人精品网站在线观看| 在线日韩欧美视频| 久久99久久99精品免观看粉嫩| 久久精品一本久久99精品| 日韩美女免费视频| 秋霞成人午夜鲁丝一区二区三区| 国产一区二区三区在线| 亚洲高清福利视频| 中文字幕不卡在线视频极品| 免费不卡欧美自拍视频| 日本一区二区三区四区视频| 97精品国产97久久久久久免费| 国内精品小视频在线观看| 国产午夜精品全部视频在线播放| 不卡av日日日| 国产精品久久综合av爱欲tv| 欧美福利视频在线| 久久精品国产久精国产思思| 成人亚洲激情网| 日韩激情av在线免费观看| 中文字幕久久久| 国产精品久久久久7777婷婷| 精品久久久久久久久久国产| 在线观看久久av| 国产精品视频999| 日韩精品免费视频| 精品视频在线播放色网色视频| 在线播放国产一区二区三区| 久久久国产精品亚洲一区| 久久伊人精品一区二区三区| 国产精品丝袜一区二区三区| 97在线观看视频国产| 国产精品视频内| 国产精品高潮粉嫩av| 国产精品免费观看在线|