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 相关文章推荐
header()函数使用说明
Nov 23 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
PHP中array_merge和array相加的区别分析
Jun 17 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
基于CakePHP实现的简单博客系统实例
Jun 28 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
yii2安装详细流程
May 23 PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 PHP
jQuery+PHP实现图片上传并提交功能
Jul 27 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
php文件上传表单摘自drupal的代码
2011/02/15 PHP
PHP实现合并discuz用户
2015/08/05 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
vue cli 全面解析
2018/02/28 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
python 实现文件的递归拷贝实现代码
2012/08/02 Python
Python中zfill()方法的使用教程
2015/05/20 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
用Python实现读写锁的示例代码
2018/11/05 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
行政助理岗位职责范文
2013/12/03 职场文书
体育教学随笔感言
2014/02/24 职场文书
党支部审查意见
2015/06/02 职场文书
志愿者工作心得体会
2016/01/15 职场文书