北京赛车 pk10开奖记录_Toyou热购彩票官网
香港高速VIP雲機房火爆上線啦!無需備案釘,開通即用!配套《巔雲自助建站系統3.0》將帶給您飛一般的可視化拖拽建站體驗桅倒,歡迎免費體驗喝媳溫。

建站專題

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

一佰互聯網站開發設計(www.yinxi.net) 發布日期 2019-04-25 14:40:46 瀏覽數: 28

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

先說秒殺模塊的思路倡擻土︰

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

1填短盎、發起秒殺請求2磺前、進入秒殺隊列3羚魔葡、隨機滯後 1 - 2 秒進行秒殺結果查詢請求(算是變相分流吧)4賈跡、成功則生成訂單5薯八、返回結果pk10开奖 第一章第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" );

測試代碼機器性能(開發機)謎頻醛︰

訂單代碼機器性能(測試機)小範︰

系統測試結果酵寶︰

模擬 1000 並發的情況艙簍,單機每秒 300+北京赛车準學士 吳可梅您忠實的,A.M.豪。 訂單斃檀,服務器毫無壓力傷。 反倒是測試機受不了了穩攤匆,CPU 飆升 100%材瘋嗅。 Apache 偶爾崩潰房。

不知道是 PHPpk10 失誤是進取的代價。畫下想象中我的愛人 多線程和 Windows 環境的支持不好委,還是 PHP 多線程本身的問題歧喀祈,區區 1000 線程跑不動磐舉。多線程的地方還是比較需要 Python 和 C 出馬駒嗎。

以上就是本文的全部內容輔黴,希望對大家的學習有所幫助亢,也希望大家多多支持網頁設計遁編瞳。

一佰互聯是全國知名建站品牌服務商,我們有九年網站建設丘桐、網站制作屁橢、網頁設計督、php開發和域名注冊及虛擬主機服務經驗貪船,提供的自助建站服務更是全國有名武粕胳。近年來還整合團隊優勢自主開發了可視化多用戶”巔雲建站系統“3.0平台版疆,拖拽排版網站制作設計掃,輕松實現pc站據李、手機微網站辰塹、小程序拉賃心、APP一體化全網營銷網站建設 擅拓簍,已成功的為全國上百家網絡公司提供自助建站平台搭建服務刻麻清。

相關新聞more

28
04月
smarty內置函數capture用法分析

本文實例講述了smarty內置函數capture用法鯨。分享給大家供大家參考蒲淡。具體分析如下某槳咆︰{capture}可以捕獲標記範圍內的輸出內容攔受,並... >>詳情

08
04月
用3個真實案例描,告訴你如何選擇適合自己的工作

本章節我們通過三個真實案例來深度分析如何找到適合自己的工作呈,在行業中穩步前進礎念,不斷提高攬坦,最終成為一名優秀的設計師現撇,獲得行業認可酪里弦,實現自我價值... >>詳情

11
05月
帶你了解專業網站建設公司,專業網站設計公司選

現在網絡的發展使大家都會選擇通過網絡來進行網站建設付宏弧,現在也有很多的專業網站建設公司出現了校壁計,讓我們大家有更多的選擇閨辣餐,那麼在這麼多的公司中淪,我們... >>詳情

05
04月
網站建設的規劃設計

1.網站規劃設計是指在網站建設前對市場進行分析,確定網站的目的和功能,並根據需要對網站建設中的技術佩輕、內容鄧誰幕、費用滴、測試催、維護等做出規劃簾淡將。網站規... >>詳情

營業執照. cdn加速服務 備案系統認證 網絡安全協會 我們的支付方式AAA認證

7x24小時服務電話:18581389571 傳真:023-85725751 免費建站交流群餞︰236412099 139947842(自助建站交流) E-Mail:post@yinxi.net 網站投訴:
重慶楚捷科技有限公司 一佰互聯©版權所有 自助建站(www.yinxi.net,Inc.) 2001-2020 All Rights Reserved 本站程序受法律保護,網站法律顧問點︰ITLAW-莊毅雄律師
中華人民共和國信息產業部網站備案號:渝ICP備12000592號
pk10开奖 北京赛车pk10