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. 在 react 里使用 antd
  2. 2021桓台高考成绩查询,桓台中考成绩查询2021
  3. lin通讯从节点同步间隔场_低成本总线技术——LIN总线协议规范介绍
  4. 如何为CSS指定对应的Media type
  5. vagrant,流浪汉,我又来啦。
  6. 简述计算机的英语作文,初中计算机的英语作文
  7. 江淮汽车涉嫌排放造假 罚款1.7亿
  8. 矫情的C++——不明确行为(undefined behavior)
  9. ansible 小试身手
  10. poj 匈牙利二分匹配 模板 poj题目
  11. Delphi开发Android用虚拟摇杆VirtualJoystic
  12. Java购票系统实训总结_Java 购票系统实现
  13. PyKDL---正运动学和逆运动学
  14. Nuxt.js重定向路由方式
  15. ios8之后的UIAlertController
  16. python画实心圆_任意空实心圆形打印|Python练习系列[8]
  17. Todo Tree插件配置
  18. Linux中awk后面的RS, ORS, FS, OFS 含义
  19. CC00229.CloudKubernetes——|KuberNetes细粒度权限控制.V13|——|Ratel.v01|k8s资源管理平台部署|
  20. CSS中如何让背景颜色半透明

热门文章

  1. 刘德华将奥运火炬义拍 拍得190万(组图)
  2. UIAutomation---IOS自动化测试的工具
  3. AutoCad2023 快速教程 2D 3D
  4. 2.6亿老年人背后有什么新商机?
  5. NPOI 创建Word
  6. 未来已至,5G加持下的云游戏将走向何方?
  7. 爱奇艺播放器使用更高倍速播放
  8. phpcms v9手机门户配置方法_无需整理
  9. 【运维】Linux如何解决root用户Operation not permitted
  10. 大话流氓软件(四):是谁把IT精英逼成了“流氓”?[转]