PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程。
多线程在处理重复性的循环任务,能够大大缩短程序执行时间。
PHP扩展下载:https://github.com/krakjoe/pthreads
PHP手册文档:http://php.net/manual/zh/book.pthreads.php
1、扩展的编译安装(Linux),编辑参数 –enable-maintainer-zts 是必选项:

'./configure'
'--prefix=/usr/local/webserver/php'
'--with-config-file-path=/usr/local/webserver/php/etc'
'--with-apxs2=/usr/local/webserver/httpd/bin/apxs'
'--with-libxml-dir=/usr/local/webserver/libxml2'
'--with-mysql=/usr/local/webserver/mysql'
'--with-mysqli=/usr/local/webserver/mysql/bin/mysql_config'
'--enable-soap' '--enable-sockets' '--with-curl' --enable-maintainer-zts
make clean
make
make install
unzip pthreads-master.zip
cd pthreads-master
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
vi /usr/local/webserver/php/etc/php.ini

添加

extension = "pthreads.so"

2、给出一段PHP多线程、与For循环,抓取百度搜索页面的PHP代码示例:

<?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);}}
}
<?phpfunction 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";
?>

PHP 多线程的使用相关推荐

  1. Java 多线程概述

    多线程技术概述 1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间. 线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换.并发执行,一个进程最少有一个线程, ...

  2. Java 多线程的基本方式

    Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

  3. RPC 笔记(08)— socket 通信(多进程多线程服务器)

    在上一节中如果并行的客户端连接数超过了默认开启进程的数量,那么后来的客户端请求将会阻塞,为了不阻塞新的客户端,我们可以将进程的单线程改成多线程即可. ​ 服务端代码: import json impo ...

  4. Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步

    主要介绍使用 threading 模块创建线程的 3 种方式,分别为: 创建 Thread 实例函数 创建 Thread 实例可调用的类对象 使用 Thread 派生子类的方式 多线程是提高效率的一种 ...

  5. Python 多线程总结(1)- thread 模块

    thread 模块 1. 单线程 首先看下单线程程序运行的例子,如下所示, import timedef loop0():print 'start loop0 begin', time.ctime() ...

  6. Python多线程调试

    有时候程序是多线程的,调试的时候可能跑到别的线程了. 这个时候把thread.start变成threa.run就好了,就会执行完当前线程再执行下一个. for thread in threads:th ...

  7. python究竟要不要使用多线程

    阅读目录 1. 先来看两个例子 2. python虚拟机机制如何控制代码执行? 3. python多线程究竟有没有用? 4. python多进程执行原理 在总结concurrent.futures库之 ...

  8. Python多线程(3)——Queue模块

    Python多线程(3)--Queue模块 Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Pyth ...

  9. java多线程(三)

    多线程的设计模式 一.Future模式:与Ajax相似. 转载于:https://www.cnblogs.com/dwxblogs/p/10909330.html

  10. Python Web学习笔记之Python多线程基础

    多线程理解 多线程是多个任务同时运行的一种方式.比如一个循环中,每个循环看做一个任务,我们希望第一次循环运行还没结束时,就可以开始第二次循环,用这种方式来节省时间. python中这种同时运行的目的是 ...

最新文章

  1. 自定义view-波纹扩散(圆扩散)
  2. java 调用office_JAVA调用PageOffice在线打开、编辑Word文档
  3. 006_Spring Data JPA基于方法名称命名规则查询
  4. python按条件拆分列表元素_如何通过在python中拆分列表元素来创建列表?
  5. The new year,new mood,new plan~~
  6. 数字图像处理实验一 直方图均衡化与直方图规定化
  7. android自动化 模拟器,Android模拟器入门[转]
  8. 爱快iKuai软路由系统远程升级(从2.5.10系统升级至3.X系列)教程(图文详解)
  9. 2020年计算机组装行业,组装电脑已成夕阳产业?DIY装机发展的道路在何方?
  10. Atom-beautify插件的安装,使用过程
  11. K8S集群搭建,并部署nginx实现跨网络访问
  12. 【Matlab瑕疵检测】阙值瓶盖瑕疵检测【含源码 730期】
  13. QT EXCEL 删除整行
  14. OLED显示与LCD显示的区别
  15. EDG夺冠时刻,微帧助力虎牙打造极佳观看体验
  16. 电动机的故障听声音就可以判断
  17. 正运动学 与 逆运动学 区别
  18. SpringBoot 基于配置文件给bean赋值
  19. 软件测试接口测试用例设计
  20. c语言程序设计考试看什么书,(全国计算机等级考试二级C语言程序设计)应该买哪些参考书?...

热门文章

  1. vue两个按钮切换_vue实现按钮切换图片
  2. UI设计面试时要注意哪些地方!
  3. vue滚动条事件(获取滚动条距离底部距离)
  4. oracle 删除用户 报错:ora-01940 无法删除当前连接的用户
  5. “我花了9块9,听配音课老师给我讲经济学……”
  6. 郝斌mysql自学视频教程_PHP从入门到精通2015版(初级)
  7. python excel进程_从Python运行Excel宏(但Excel进程保留在内存中)
  8. PV操作实现进程同步问题
  9. JavaScript实现iphone时钟
  10. Python中二进制十进制转换