php多线程并发实现方法


Posted in PHP onSeptember 30, 2016

本文实例讲述了php多线程并发实现方法。分享给大家供大家参考,具体如下:

java里多线程就是一个new thread的事情,php依赖apache靠着linux底层有一个多线程的办法。

这里就来说说如果你无法操控apache的服务器,如何模拟php并发

<?php
if(function_exists('date_default_timezone_set')) {
  date_default_timezone_set('PRC');
}
function a()
{
 $time = time();
 sleep(3);
 $fp = fopen('result_a'.$time.'.log', 'w');
 fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
 fclose($fp);
}
function b()
{
 $time = time();
 sleep(3);
 $fp = fopen('result_b'.$time.'.log', 'w');
 fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
 fclose($fp);
}
if(!isset($_GET['act'])) $_GET['act'] = 'a';
if($_GET['act'] == 'a')
{
 a();
}
else if($_GET['act'] == 'b') b();
?>

以上代码,在本地写入一个文件。

如果你访问 localhost/a.php 在两个浏览器标签尽可能快的同时打开,发现两个文件创建时间相差为3秒

但是如果你访问localhost/a.php?act=b 另一个访问/a.php?act=a 你发现两个文件创建的时间几乎差不多。

对于apache来说同样的url意味着一个线程(我们或者说是进程),但是不同的URL意味着可以并发。

如果php内部有下载的动作

function runThread()
{
 down("http://localhost/test/a.php?act=a");
}
if($_GET['act'] == 'run')
{
 echo 'start:';
 runThread();
 echo ' End';
}

http://localhost/test/a.php?act=run

http://localhost/test/a.php?act=run&s=2

只要主访问的url不同,则认为是不同的进行,意味着并发。文件创建时间不为3秒

本地有Linux服务器的朋友也可以借助linux来进行模拟并发

<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>

上面存成test.php, 然后写一段SHELL代码

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP开发文件系统实例讲解
Oct 09 PHP
刚才在简化php的库,结果发现很多东西
Dec 31 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
Discuz板块横排显示图片的实现方法
May 28 PHP
php array_search() 函数使用
Apr 13 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
php遍历解析xml字符串的方法
May 05 PHP
php解析xml 的四种简单方法(附实例)
Jul 11 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
Sep 30 #PHP
分享PHP-pcntl 实现多进程代码
Sep 30 #PHP
PHP编写daemon process详解及实例代码
Sep 30 #PHP
PHP 极验验证码实例讲解
Sep 29 #PHP
php自定义函数转换html标签示例
Sep 29 #PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 #PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 #PHP
You might like
php5 pdo新改动加载注意事项
2008/09/11 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
php使用正则验证中文
2016/04/06 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
JS实现页面打印功能
2017/03/16 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
python实现翻译word表格小程序
2020/02/27 Python
处理textarea中的换行和空格
2019/12/12 HTML / CSS
财务管理专业应届毕业生求职信
2013/09/22 职场文书
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
奖励申请报告范文
2015/05/15 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技