以前使用curl的多线程并不是真正的多线程,只是一种模拟的多线程,现在使用pthreads来实现真正意义上的多线程。

下载:

  windows下:

    http://windows.php.net/downloads/pecl/releases/pthreads/0.0.45/

  mac、unix、linux下:

    https://github.com/krakjoe/pthreads

    或:http://pecl.php.net/package/pthreads(含文档)

安装方式:

  windows下:

    解压得到pthreadVC2.dll和php_pthreads.dll文件,把vc2文件放到php.exe同级目录,把php_pthreads.dll放到扩展目录下。

    修改php.ini文件 添加extension=php_pthreads.dll

    修改Apache配置文件httpd.conf 添加LoadFile "yourpath/php/pthreadVC2.dll"

  mac、unix、linux下:

    具体可参考宴哥的博客http://zyan.cc/pthreads/

调用方式:

  具体的用法也可以参考宴哥的博客http://zyan.cc/pthreads/

<?php
class Request extends Thread {
public $url;
public $data;
public function __construct($url) {
$this->url = $url;
}
public function run() {
// 线程处理一个耗时5秒的任务
for($i=0;$i<5;$i++) {
echo '线程: '.date('H:i:s')."\n";
sleep(1);
}
$response = file_get_contents($this->url);
if ($response) {
$this->data = array($response);
}
echo "线程: 任务完成\n";
}
}
$request = new Request('hello.html');
// 运行线程:start()方法会触发run()运行
if ($request->start()) {
// 主进程处理一个耗时10秒的任务,此时线程已经工作
for($i=0;$i<10;$i++) {
echo '进程: '.date('H:i:s')."\n";
sleep(1);
}
// 同步线程并输出线程返回的数据
$request->join();
echo '线程返回数据: '.$request->data[0];
}
/*
如果顺序执行,合计时间将是15秒,借助线程,则只需10秒.
生成文件: echo 'Hello' > hello.html
运行计时: time php req.php
查看线程: ps -efL|head -n1 && ps -efL|grep php
*/

最新文章

  1. 使用管道符在PowerShell中进行各种数据操作
  2. Java Js实现导出csv
  3. Maven 学习-入门
  4. .net MVC 中枚举类型Enum 转化成 下拉列表的数据源
  5. arcglobe 图层三大类说明
  6. Vmware中Ubuntu的各种问题
  7. 大数据分析与机器学习领域Python兵器谱
  8. POJ 3904 Sky Code (容斥原理)
  9. Android OptionMenu
  10. LCT小结
  11. WPF中的DataTemplate
  12. 揭开Linux操作系统的Swap交换区之谜
  13. Dapper的扩展这个你知道嘛?
  14. 【java设计模式】责任链模式
  15. iOS中多种方式实现打电话、发短信、写邮件
  16. Linux 中使用 firewalld
  17. Jmeter性能测试之进阶BeanShell的使用
  18. WC.exe【C】
  19. 聊一聊Java如何接入招行一网通支付功能
  20. Appium-desktop安装启用Inspector一直报错An unknown server-side error occurred...

热门文章

  1. webuploader在IE8/9下上传遇到的两个问题
  2. 1250 Super Fast Fourier Transform(湘潭邀请赛 暴力 思维)
  3. make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1
  4. [Javascript] 前端随笔
  5. 如何快速找到排好序的数组中最先不连续的数字N
  6. AC自动机专题
  7. 【转】C# 控件的自定义拖动、改变大小方法
  8. JS应用,表单上的一些东西
  9. LINUX 常用命令 ps 详解
  10. HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash