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

首頁 > 語言 > PHP > 正文

PHP多線程模擬實現秒殺搶單

2024-05-05 00:02:16
字體:
來源:轉載
供稿:網友

應集團要求給服務號做了個搶單秒殺的功能,需要對秒殺做個測試,想試試PHP多線程,就模擬了下搶單功能。

先說秒殺模塊的思路:

正常情況下的用戶秒殺操作

1、發起秒殺請求
2、進入秒殺隊列
3、隨機滯后 1 - 2 秒進行秒殺結果查詢請求(算是變相分流吧)
4、成功則生成訂單
5、返回結果

以下是模擬秒殺的代碼:

<?phpset_time_limit(0);/*** 線程的執行任務*/class Threadrun extends Thread{  public $url;  public $data;  public $params;  public function __construct($url, $params=[])  {   $this->url = $url;   $this->params = $params;  }  public function run()  {   if(($url = $this->url))   {     $params = [      'goods_id'  => 1,      'activity_id'  => 1,      'user_id'   => isset($this->params['user_id']) ? $this->params['user_id'] : $this->getCurrentThreadId(),     ];     $startTime = microtime(true);     $this->data = [      'id'   => $params['user_id'],      'result'  => model_http_curl_get( $url, $params ),      'time'  => microtime(true)-$startTime,      'now'   => microtime(true),     ];   }  }}/*** 執行多線程*/function model_thread_result_get($urls_array){  foreach ($urls_array as $key => $value)  {   $threadPool[$key] = new Threadrun($value["url"],['user_id'=>$value['user_id']]);   $threadPool[$key]->start();  }  foreach ($threadPool as $thread_key => $thread_value)  {   while($threadPool[$thread_key]->isRunning())   {     usleep(10);   }   if($threadPool[$thread_key]->join())   {     $variable_data[$thread_key] = $threadPool[$thread_key]->data;   }  }  return $variable_data;}/*** 發送 HTTP 請求*/function model_http_curl_get($url,$data=[],$userAgent=""){  $userAgent = $userAgent ? $userAgent : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)';  $curl = curl_init();  curl_setopt($curl, CURLOPT_URL, $url);  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  curl_setopt($curl, CURLOPT_TIMEOUT, 5);  curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);  curl_setopt($curl, CURLOPT_POST, true);  if( !empty($data) ) {   curl_setopt($curl, CURLOPT_POSTFIELDS, $data);  }  $result = curl_exec($curl);  curl_close($curl);  return $result;}/** * 友好的打印變量 * @param $val */function dump( $val ){  echo '<pre>';  var_dump($val);  echo '</pre>';}/** * 寫日志 * @param $msg * @param string $logPath */function writeLog( $msg, $logPath='' ) {  if( empty($logPath) ) {   $logPath = date('Y_m_d').'.log';  }  if( !file_exists($logPath) ) {   $fp = fopen( $logPath,'w' );   fclose( $fp );  }  error_log( $msg.PHP_EOL, 3, $logPath);}/** * 生成日志信息 * @param $result * @param $timeDiff * @return bool|string */function createLog( $result, $timeDiff ){  if( empty($result) || !is_array($result) ) {   return false;  }  $succeed = 0;  $fail = 0;  foreach( $result as $v ) {   $times[] = $v['time'];   $v['result'] === false ? $fail++ : $succeed++;  }  $totalTime = array_sum( $times );  $maxTime = max( $times );  $minTime = min( $times );  $sum = count( $times );  $avgTime = $totalTime/$sum;  $segment = str_repeat('=',100);  $flag = $segment . PHP_EOL;  $flag .= '總共執行時間:' . $timeDiff . PHP_EOL ;  $flag .= '最大執行時間:' . $maxTime . PHP_EOL;  $flag .= '最小執行時間:' . $minTime . PHP_EOL;  $flag .= '平均請求時間:' . $avgTime . PHP_EOL;  $flag .= '請求數:' . $sum . PHP_EOL;  $flag .= '請求成功數:' . $succeed . PHP_EOL;  $flag .= '請求失敗數:' . $fail . PHP_EOL;  $flag .= $segment . PHP_EOL;  return $flag;}/** * 發起秒殺請求 */function insertList( $urls, $logPath='' ){  $t = microtime(true);  $result = model_thread_result_get($urls);  $e = microtime(true);  $timeDiff = $e-$t;  echo "總執行時間:" . $timeDiff . PHP_EOL;  foreach( $result as $v ) {   $msg = '用戶【' . $v['id'] . '】秒殺商品, 返回結果 ' . $v['result'] . ' 用時【' . $v['time'] . ' 秒】 當前時間【'.$v['now'].'】';   writeLog( $msg,$logPath );  }  $logStr = createLog( $result, $timeDiff);  writeLog( $logStr, $logPath );  return $result;}//發起秒殺請求for ($i=0; $i < 1000; $i++){  $urls_array[] = array("name" => "baidu", "url" => "http://***.***.com/seckill/shopping/listinsert");}$list = insertList( $urls_array, './inset.log' );//發起秒殺結果查詢請求$urls_array = [];foreach( $list as $v ) {  if( $v['result'] === false ) {   continue;  }  $urls_array[] = array(        "name"  => "baidu",        "url"  => "http://***.***.com/seckill/shopping/query",        'user_id' => $v['id'],  );}insertList( $urls_array, './query.log' );

測試代碼機器性能(開發機):

PHP,多線程,秒殺,搶單,PHP秒殺搶單,PHP搶單

訂單代碼機器性能(測試機):

PHP,多線程,秒殺,搶單,PHP秒殺搶單,PHP搶單

系統測試結果:

模擬 1000 并發的情況,單機每秒 300+ 訂單,服務器毫無壓力。
反倒是測試機受不了了,CPU 飆升 100%。 Apache 偶爾崩潰。

不知道是 PHP 多線程和 Windows 環境的支持不好,還是 PHP 多線程本身的問題,區區 1000 線程跑不動。多線程的地方還是比較需要 Python 和 C 出馬。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产中文精品字幕自在自线| 亚洲综合中文字幕在线观看| 精品久久久久久久久久| 久久久久久久久久久91| 亚洲高清免费观看高清完整版| 91精品中文在线| 亚洲视频第一页| 69**夜色精品国产69乱| 欧美精品福利视频| 久久av.com| 91美女高潮出水| 亚洲精品视频网上网址在线观看| 国产欧美欧洲在线观看| 欧美天天综合色影久久精品| 伦伦影院午夜日韩欧美限制| 国产91精品久久久久久久| 日韩av色在线| 亚洲精品久久久久久久久久久久| 日韩av在线免费看| 欧美综合国产精品久久丁香| 日韩中文字幕亚洲| 欧美日韩精品国产| 日韩欧美成人精品| 综合136福利视频在线| 在线观看视频亚洲| 日韩国产高清视频在线| 国产一区二区三区18| 欧美在线影院在线视频| 亚洲精品在线91| 国产精品欧美日韩| 国产精品久久久久久久电影| 欧美中文字幕视频| 91精品久久久久久久久久久久久| 欧美国产视频日韩| 亚洲天堂av图片| 久久久久久久久亚洲| 国产精品久久不能| 蜜月aⅴ免费一区二区三区| 日韩亚洲欧美成人| 亚洲成人av片在线观看| 亚洲男人天堂手机在线| 日韩av免费在线观看| 在线视频亚洲欧美| 91久久精品美女| 国产专区欧美专区| 日韩国产高清污视频在线观看| 亚洲三级黄色在线观看| 国产精品高潮视频| 日韩精品在线第一页| 国产精品伦子伦免费视频| 91精品国产91久久久久久| 在线亚洲男人天堂| 亚洲视屏在线播放| 美日韩精品视频免费看| 日本午夜人人精品| 亚洲精品一区中文字幕乱码| 久久久久日韩精品久久久男男| 日本久久中文字幕| 日韩精品在线看| 亚洲国产欧美一区二区丝袜黑人| 日韩精品一区二区视频| 亚洲国产精品久久久久久| 国产成人综合一区二区三区| 91在线视频九色| 久久在线观看视频| 色播久久人人爽人人爽人人片视av| 欧美午夜精品久久久久久人妖| 国产日韩欧美自拍| 亚洲精品一二区| 日韩美女写真福利在线观看| 日韩国产精品视频| 97人人模人人爽人人喊中文字| 久久综合网hezyo| 亚洲精品乱码久久久久久按摩观| 亚洲国产又黄又爽女人高潮的| 日韩亚洲国产中文字幕| 91精品国产99| 日韩电视剧免费观看网站| 欧美视频不卡中文| 一区二区三区黄色| 亚洲欧美日韩精品久久奇米色影视| 久久天天躁狠狠躁老女人| 欧美日韩国产精品一区二区三区四区| 久久国产精品久久久久久久久久| 久久精品视频网站| 国产一区二区在线免费视频| 欧美激情视频免费观看| 国产欧美一区二区三区在线| www.亚洲免费视频| 亚洲一区二区免费在线| 国产精品福利在线观看| 色妞一区二区三区| 亚洲精品wwwww| 最近2019年好看中文字幕视频| 日本国产欧美一区二区三区| 91在线免费视频| 国产精品成熟老女人| 精品色蜜蜜精品视频在线观看| 久久精品中文字幕一区| 久久久人成影片一区二区三区| 日韩av黄色在线观看| 日韩中文字幕国产精品| 亚洲欧美中文日韩v在线观看| 色综合久久精品亚洲国产| 欧美精品做受xxx性少妇| 欧美视频13p| 欧美大片欧美激情性色a∨久久| 精品国产乱码久久久久酒店| 欧美做爰性生交视频| 91久久精品在线| 日韩电影中文 亚洲精品乱码| 亚洲自拍偷拍色片视频| 日韩成人免费视频| 欧美日韩国产综合新一区| 欧美高清在线观看| 91精品国产综合久久久久久蜜臀| 91在线视频九色| 亚洲男人第一av网站| 国产精品国语对白| 精品中文视频在线| 91亚洲精品在线观看| 国产美女精品视频免费观看| 亚洲最大激情中文字幕| 欧美成人sm免费视频| 久久久国产精彩视频美女艺术照福利| 日韩av在线免费观看一区| 欧美高跟鞋交xxxxhd| 午夜精品一区二区三区av| 国产精品女人久久久久久| 欧美成人精品在线播放| 国产婷婷97碰碰久久人人蜜臀| 91在线观看免费高清| 国产精品亚洲自拍| 伊人久久五月天| 97超级碰碰碰| 亚洲国产天堂久久国产91| 亚洲欧美精品suv| 免费av在线一区| 亚洲开心激情网| 欧美电影免费观看网站| 欧美三级xxx| 欧美www视频在线观看| 亚洲黄色成人网| 欧美洲成人男女午夜视频| 亚洲第一页自拍| 欧美丰满少妇xxxx| 国产精品视频一区二区三区四| 日韩精品视频在线播放| 国产日韩欧美在线播放| 97久久超碰福利国产精品…| 亚洲亚裔videos黑人hd| 日韩中文字幕av| 国产中文字幕亚洲| 欧美大片大片在线播放| 国内精品久久久久久中文字幕| 国产一区二区在线免费| 欧美日本亚洲视频| 国产精品av网站| 国产精品成久久久久三级| 亚洲嫩模很污视频| 国产视频久久久| 亚洲成人久久一区| 国产在线精品播放| 久久全国免费视频|