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 gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
PHP提取字符串中的图片地址[正则表达式]
Nov 12 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
浅谈php命令行用法
Feb 04 PHP
php文件上传你必须知道的几点
Oct 20 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 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设计模式 Decorator(装饰模式)
2011/06/26 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
PHP四大安全策略
2014/03/12 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
node 版本切换的实现
2020/02/02 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
Numpy数组的保存与读取方法
2018/04/04 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
对python生成业务报表的实例详解
2019/02/03 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
经管应届生求职信
2013/11/17 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
欢迎词范文
2015/01/27 职场文书
普宁寺导游词
2015/02/04 职场文书
晚会主持人开场白台词
2015/05/28 职场文书