一、PHP安装pthreads的多线程扩展

下载pthreads源码:http://pecl.php.net/package/pthreads

首先确定安装的php版本是线程安全的,如果不是的话重新编译加上 --enable-maintainer-zts \

1.解压tar -zxvf pthreads-0.0.44.tgz ;

2.进入源码文件夹 cd pthreads-0.0.44 执行 /usr/local/php/bin/phpize;

3.执行./configure --with-php-config=/usr/local/php/bin/php-config;

4.执行make && make install;

5.编辑/usr/local/php/lib/php.ini加上extension=pthreads.so

6.重启php就行了...

7、php -m | grep pthreads 查看是否安装完成

注意:安装 pthreads 需要的是已安装的PHP版本为 thread safly(安全线程)已开启

二、使用多线程的方法

1、 入口文件 run.php

<?php
header('Content-Type:application/json; charset=utf-8');
error_reporting(E_ERROR | E_CORE_ERROR | E_PARSE);/*** 任务执行入口*/$stime = time();require_once("./thread.php");class Task{private $threadNum = 5; //线程并行执行个数public function goRun(){$start_time = time();//构造任务列表$GLOBALS["taskList"] = [['name'=>'任务1', 'url'=>'url1'],['name'=>'任务2', 'url'=>'url2'],['name'=>'任务3', 'url'=>'url3'],['name'=>'任务4', 'url'=>'url4'],['name'=>'任务5', 'url'=>'url5'],['name'=>'任务6', 'url'=>'url6'],['name'=>'任务7', 'url'=>'url7'],['name'=>'任务8', 'url'=>'url8'],['name'=>'任务9', 'url'=>'url9'],['name'=>'任务10', 'url'=>'url10'],];while(count($GLOBALS["taskList"])){$taskList = $this->readyThread($GLOBALS["taskList"]);foreach($taskList as $key=>$val){$token = "task_".$this->randomkeys(20);$pool[$token] = new TaskThread($key, $val);echo "---------------创建线程:".$token.PHP_EOL;}echo "等待执行完成".PHP_EOL;//开始执行线程foreach ($pool as $key=>$th) {$th->start();sleep(1);   //延迟启动unset($pool[$key]);}}sleep(3);//线程回收完毕$end_time = time();$use = $end_time - $start_time;echo date("Ymd H:i:s")."    执行完毕...     USE  {$use} s".PHP_EOL;exit;}public function randomkeys($length) {$returnStr='';$pattern = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';for($i = 0; $i < $length; $i ++) {$returnStr .= $pattern {mt_rand ( 0, 61 )}; //生成php随机数}return $returnStr;}/*** 开启线程前分配线程任务*/private function readyThread($data) {$tasklist = array();$i = 1;foreach ($data as $key => $val) {if ($i > $this->threadNum) {return $tasklist;}$tasklist[$i][] = $val;unset($GLOBALS["taskList"][$key]);$i++;}return $tasklist;}
}$Task = new Task();
$Task->goRun();

2、多线程控制器文件 thread.php

<?php
/*** 多线程控制器*/class TaskThread extends Thread {private $task;private $name;//构造function __construct($name, $task) {$this->task = $task;$this->name = $name;unset($task, $name);}//线程主体function run() {//任务初始化执行【此处根据自己的需要,编辑具体任务执行方法】echo "<pre/>";print_r($this->task);unset($this->task);unset($this->name);exit();}}

php的pthreads扩展实现执行多线程任务相关推荐

  1. Oracle定时器执行多线程

    what里面加下面代码强制执行多线程 begin   execute immediate 'alter session force parallel dml parallel 16';   pkg_s ...

  2. 使用日志记录功能查看PHP扩展的执行过程

    了解过PHP内核的同学都知道,PHP的一次请求的生命周期 1.启动Apache后,PHP解释程序也随之启动.PHP调用各个扩展的MINIT方法,从而使这些扩展切换到可用状态 2.当一个页面请求发生时, ...

  3. 单核CPU如何执行多线程

    概述 在多处理器系统中,多个线程在不同的内核上同时执行. 例如,如果有两个线程和两个内核,则每个线程将在单个内核上运行.在单处理器系统中,多个线程执行一个接一个的执行,或者等到一个线程完成或被操作系统 ...

  4. 单核cpu多核cpu如何执行多线程

    花了很多时间来整理这方面的相关内容,参考博客:多CPU,多核,多进程,多线程 程序和进程 程序: 为完成特定任务,用某种语言编写的一组指令集合,即一段静态的代码 进程: 是程序的一次执行过程,或是正在 ...

  5. php扩展cURL执行中途无响应

    今天跑脚本遇到一个奇怪的问题,就是cURL请求到后期会出现程序阻塞卡死,无异常无响应,一直挂起,脚本也不会自动结束.跟对方沟通后说,"哥们儿,是不是你们的程序有问题啊,这边研发排查了,说12 ...

  6. 【Python】称重系统-异步执行多线程运行threading 模块 Thread 类实现

    上次实现了从一个py程序窗口引用另一个py程序,但是发现原来的py窗口关不掉,最后学到一个新的方法-异步执行,Python的多线程编程,使用了threading 模块,可以同时运行两段代码.完美解决之 ...

  7. linux 信号 sigaction(是signal的扩展,在多线程应用中替代了signal)(除了信号值信息外,还可以附加数值信息(以及指针:不可跨进程):sigqueue()函数)

    参考视频教程:https://www.bilibili.com/video/BV145411a76x?p=6 另外:Linux多线程详解(线程的实现.线程回收.线程取消.线程清理,线程信号.线程调试, ...

  8. MyBatisPlus插件扩展_SqlExplainInterceptor执行分析插件的使用

    场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/37194 简介 SQL 执行分析拦截器[ 目前只支持 MYSQL-5 ...

  9. Linux 使用 Python 执行多线程命令

    参考链接1:https://blog.csdn.net/qq_27825451/article/details/102909772 参考链接2:https://www.cnblogs.com/suns ...

最新文章

  1. android studio dump java heap_Android Studio 3.0 Memory Profiler使用
  2. 七牛云内容审核服务被选为「上海首批人工智能创新产品」
  3. 在博客园添加Lisp(或其它)代码高亮
  4. 校招启动 | 2021 神策未来星全面启航,只差 1 个你!
  5. 6.6 rsync:文件同步工具
  6. 2060 : Minsum Plus(贪心)
  7. 十招教你学会软件破解(转)
  8. cnn 一维时序数据_蚂蚁集团智能监控的时序异常检测:基于 CNN 神经网络的异常检测...
  9. Nginx的应用之动静分离
  10. 中路径查找器的功能_还在用路径查找器?试试它吧!
  11. JavaScript 多级联动浮动菜单
  12. onlyoffice开发java_OnlyOffice功能及演示
  13. linux 交叉编译 makefile,简单谈谈Makefile和交叉编译工具链
  14. 数学之美 读书心得与笔记
  15. cesium 设置飞机的heading pitch roll(航向等)
  16. 俞敏洪:度过有意义的生命
  17. 哔哩哔哩2020校园招聘前端笔试题(卷一)
  18. java操作word,自动更新目录/域
  19. 宝岛眼镜全员MCN,玩转私域kol
  20. 肖像转素描:AI小素的前世今生

热门文章

  1. 基础知识——进制 与 进制转换 (C++ 程序)
  2. linux 目录下比对md5,Linux下批量校验文件md5值(find+diff)
  3. Matlab实现图像分割
  4. 可盈可乐区块链行业周报(10.16-10.31)
  5. 如何成为一名合格的前端工程师
  6. Esxi 集成第三方驱动
  7. 深度学习从入门到精通——Opencv模板匹配完成信用卡识别
  8. mac big sur下安装phpredis报错configure: error: Cannot find php_hash.h
  9. Vue2 手势解锁密码 / 支付宝手势解锁
  10. Codeforces Round #644 (Div. 3) G.A/B Matrix