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 相关文章推荐
全文搜索和替换
Oct 09 PHP
PHP去除数组中重复的元素并按键名排序函数
Aug 18 PHP
php完全过滤HTML,JS,CSS等标签
Jan 16 PHP
php设计模式 Decorator(装饰模式)
Jun 26 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
ThinkPHP空模块和空操作详解
Jun 30 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
PHP面向对象程序设计方法实例详解
Dec 24 PHP
php之可变函数的实例详解
Sep 13 PHP
laravel 实现设置时区的简单方法
Oct 10 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
一段批量给页面上的控件赋值js
2010/06/19 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
详解JS数值Number类型
2018/02/07 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
python列表操作实例
2015/01/14 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python实现抖音点赞功能
2019/04/07 Python
django实现后台显示媒体文件
2020/04/07 Python
Python 如何创建一个线程池
2020/07/28 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
英文自荐信
2013/12/19 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
关于运动会的广播稿
2015/08/19 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript
解决Oracle数据库用户密码过期
2022/05/11 Oracle