文档章节

体验一下多线程和普通的程序的区别

bengozhong
 bengozhong
发布于 2015/08/11 15:05
字数 203
阅读 41
收藏 0

测试看出来用多线程去跑和普通的跑大概差距时间是八倍


<?php  

      class test_thread_run extends Thread   
      {  
          public $url;  
          public $data;  
      
          public function __construct($url)  
          {  
              $this->url = $url;  
          }  
      
          public function run()  
          {  
              if(($url = $this->url))  
              {  
                  $this->data = model_http_curl_get($url);  
              }  
          }  
      }  
      
      function model_thread_result_get($urls_array)   
      {  
          foreach ($urls_array as $key => $value)   
          {  
              $thread_array[$key] = new test_thread_run($value["url"]);  
              $thread_array[$key]->start();  
          }  
      
          foreach ($thread_array as $thread_array_key => $thread_array_value)   
          {  
              while($thread_array[$thread_array_key]->isRunning())  
              {  
                  usleep(10);  
              }  
              if($thread_array[$thread_array_key]->join())  
              {  
                  $variable_data[$thread_array_key] = $thread_array[$thread_array_key]->data;  
              }  
          }  
          return $variable_data;  
      }  
      
      function model_http_curl_get($url,$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);  
          $result = curl_exec($curl);  
          curl_close($curl);  
          return $result;  
      }  
      
      for ($i=0; $i < 100; $i++)   
      {   
          $urls_array[] = array("name" => "baidu", "url" => "http://www.baidu.com/s?wd=".mt_rand(10000,20000));  
      }  
      
      $t = microtime(true);  
      $result = model_thread_result_get($urls_array);  
      $e = microtime(true);  
      echo "多线程:".($e-$t)."\n";  
      
      $t = microtime(true);  
      foreach ($urls_array as $key => $value)   
      {  
          $result_new[$key] = model_http_curl_get($value["url"]);  
      }  
      $e = microtime(true);  
      echo "For循环:".($e-$t)."\n";  
    ?>

© 著作权归作者所有

bengozhong
粉丝 21
博文 522
码字总数 539819
作品 0
深圳
技术主管
私信 提问
基于 Struts2 标签的 BigPipe 技术实现

Facebook 介绍了一个名为 BigPipe 的技术,这项技术可使 Facebook 站点的访问速度提升一倍。目前,也有一小部分文章介绍了该技术在 JSP 中的实现,但是这些文章只是基于 Servlet 的理论实现,...

IBMdW
2011/08/29
746
0
那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)

一. 背景   在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多...

Yaopengfei
2018/06/21
0
0
java 中两种多线程的区别,start方法和run方法的启动区别

直接上代码看的更清晰: 运行发现结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start方法,则会通过JVM找到run方法。下面启动sta...

SundyIT
2016/04/21
129
0
Java 多线程回顾

做java web开发,一直以来比较依赖java框架和oracle数据库的功能。因为一般遇到高并发的情况并不多,企业内软件多半用户数不多,即使偶尔遇到,也都在oracle数据库中处理了。 对java的多线程...

五大三粗
2015/11/25
16
0
Java多线程之初体验

在Java中要想实现多线程,有两种方式,一种是继承Thread类,另外一种是实现Runable接口。 方法一: 通过Thread实现多线程 方法二: 实现Runable接口实现多线程 使用多线程 运行效果截图 Thre...

小神神的大草原
2016/05/19
23
0

没有更多内容

加载失败,请刷新页面

加载更多

zk服务预启动和启动选举过程

QuorumPeerMain类public static void main(String[] args) { QuorumPeerMain main = new QuorumPeerMain(); try { main.initializeAndRun(args); } catch (Illega......

writeademo
32分钟前
6
0
深究递归和迭代的区别、联系、优缺点及实例对比

http://blog.csdn.net/laoyang360/article/details/7855860 http://www.zhihu.com/question/20278387 深究递归和迭代的区别、联系、优缺点及实例对比 1.概念区分 递归的基本概念:程序调用自身...

slagga
35分钟前
5
0
基于SOM-TL6678核心板而研发的TL6678-EasyEVM开发板硬件说明书

TL6678-EasyEVM是广州创龙基于SOM-TL6678核心板而研发的一款多核高性能DSP开发板。开发板采用核心板+底板方式,底板采用沉金无铅工艺的四层板设计,尺寸为200mm*106.65mm,它为用户提供了SOM...

Tronlong创龙
38分钟前
5
0
分别在有网和无网状态下批量安装python库

## 连网状态下,批量安装python库查看当前python环境下已安装的库包版本查看命令:pip freeze"""alabaster==0.7.10anaconda-client==1.6.3anaconda-navigator==1.6.2anaconda-projec......

KYO4321
41分钟前
3
0
fiddler、Charles-断点

一、添加Charles断点 1、用Charles抓包发起一次接口请求 2、对要打断点的接口右键,选择【Breakpoints】 二、Charles断点设置 1、点击Charles菜单-【Proxy】-【Breakpoint...】,此时会弹出【...

果树啊
41分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部