实例讲解php实现多线程


Posted in PHP onJanuary 27, 2019

我们首先来看一个示例

<?php
 
class execMulti {
 function MultithreadTest {
  exec("php static_massive.php > /dev/null &");
 
  echo "处理完成了";
 }
}
?>

当执行上述操作时,即使在耗时的处理结束之前也显示处理完成。

exec("php static_massive.php > /dev/null &");

由于“ > / dev / null& ”返回的值丢失,我们不会等待响应。

因此,处理完成指示比耗时处理更快。

但是,该方法不知道耗时的处理何时结束。

不要忘记考虑采取日志的执行,登录DB等方法向用户传递执行结果。

用于多线程的方法(pthreads)

最后,介绍使用PHP扩展模块pthreads的方法。

它可以比上面使用exec的方法更简单。

①配置环境并安装php

请使用vagrant等准备喜欢的环境。

php 需要使用线程安全版本,这是多线程和安全的实现。

从官方下载线程安全版本的 PHP。

访问以下内容并从图中的红框下载。

http://www.php.net/downloads.php

实例讲解php实现多线程

此外,对于线程安全安装,您需要使用configure选项指定-enable-maintainer-zts。

./configure --enable-maintainer-zts

根据需要,也可以安上Apache和mysql的选项。

用以下命令确认了php的版本就可以了。

php -v

②pthreads的安装

我们来下载zip格式。

https://github.com/krakjoe/pthreads/archive/master.zip

解压zip,移动到解压缩文件,然后执行phpize。

如果您在PHP模块列表上运行pthreads,则可以执行以下操作。

php -m

根据环境的不同,这一块的设定也会有所不同,可以用环境名+pthreads等进行检索来寻找信息。

③尝试使用多线程

示例如下

<?php
class pthreadsTest extends Thread {
 public function run () {
  sleep(5);
 }
}
$ts1 = new pthreadsTest();
$ts1->start(); 
$ts2 = new pthreadsTest();
$ts2->start(); 
?>

因为sleep(5)被调用两次,所以需要10秒,但实际上它将是5秒。

PHP 相关文章推荐
PHP编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
php中全局变量global的使用演示代码
May 18 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
详解php中空字符串和0之间的关系
Oct 23 PHP
php发送http请求的常用方法分析
Nov 08 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
Aug 25 PHP
thinkphp 获取控制器及控制器方法
Apr 16 PHP
php中访问修饰符的知识点总结
Jan 27 #PHP
实例讲解php将字符串输出到HTML
Jan 27 #PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 #PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 #PHP
PHP的PDO事务与自动提交
Jan 24 #PHP
PHP的PDO连接讲解
Jan 24 #PHP
PHP的PDO预定义常量讲解
Jan 24 #PHP
You might like
php 文件上传实例代码
2012/04/19 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
PHP实现微信对账单处理
2018/10/01 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
禁止js文件缓存的代码
2010/04/09 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Python3.6正式版新特性预览
2016/12/15 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
制药工程专业应届生求职信
2013/09/24 职场文书
培训班主持词
2014/03/28 职场文书
委托公证书范本
2014/04/03 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL