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
Discuz! Passport 通行证整合
Mar 27 PHP
PHP常用代码大全(新手入门必备)
Jun 29 PHP
php批量缩放图片的代码[ini参数控制]
Feb 11 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 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除数取整示例
2014/04/24 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
python杀死一个线程的方法
2015/09/06 Python
Python字符串切片操作知识详解
2016/03/28 Python
windows下ipython的安装与使用详解
2016/10/20 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
Opencv求取连通区域重心实例
2020/06/04 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
婚宴致辞
2015/07/28 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电