博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么要使用 SPL中的 SplQueue实现队列
阅读量:5901 次
发布时间:2019-06-19

本文共 1472 字,大约阅读时间需要 4 分钟。

今天看php的SPL标准库部分里面涉及到数据结构其中有 SplQueue 来实现队列效果,但是我刚接触php的时候学习到的是 使用array的 array_push 和 array_pop 就可以实现队列效果啦啊,那么说 SPL中的这个是不是显得很鸡肋呢??后来进过查询资料并且实际运行一下程序后发现,其实在性能方面,使用spl的数据结构比使用array模拟出来的队列在性能上强很多:

  array数组模拟队列,处理100000任务

list($t1, $t2) = explode(' ', microtime());$st = (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);$arrq = array();for($i = 0; $i <100000; $i++){    $data = "hello $i\n";    array_push($arrq, $data);    if ($i % 100 == 99 and count($arrq) > 100)    {        $popN = rand(10, 99);        for ($j = 0; $j < $popN; $j++)        {            array_shift($arrq);        }    }}$popN = count($arrq);for ($j = 0; $j < $popN; $j++){    array_shift($arrq);}list($t1, $t2) = explode(' ', microtime());$et = (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);echo $et - $st;

执行三次取平均值为:3900 ms

  使用SplQueue

list($t1, $t2) = explode(' ', microtime());$st = (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);$splq = new SplQueue;for($i = 0; $i < 100000; $i++){    $data = "hello $i\n";    $splq->push($data);    if ($i % 100 == 99 and count($splq) > 100)    {        $popN = rand(10, 99);        for ($j = 0; $j < $popN; $j++)        {            $splq->shift();        }    }}list($t1, $t2) = explode(' ', microtime());$et = (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);echo $et - $st;

执行三次取平均值为:117 ms

性能提升 33 倍

关于spl标准库这块,看来还要多研究研究,既然文档中有这个库,那么肯定有它独特的地方!

参考文档 :

 

转载于:https://www.cnblogs.com/itsuibi/p/10870608.html

你可能感兴趣的文章
Linux的计划任务
查看>>
Linux服务器安全加固
查看>>
解决linux系统中查看中文乱码问题
查看>>
ubuntu10.10和windows双系统启动顺序的修改
查看>>
小蚂蚁学习APP接口开发(1)—— json方式封装通信接口
查看>>
我的友情链接
查看>>
CDN相关
查看>>
Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
查看>>
三种判断端口存活的方法和链接200的判断方法
查看>>
我的友情链接
查看>>
ftp协议基础
查看>>
顺时针打印矩阵
查看>>
开源视频平台:Kaltura
查看>>
C++中赋值函数和拷贝构造函数(举例说明)
查看>>
企业如何给MYSQL创建表,查询表,创建索引实例
查看>>
JAXB
查看>>
图像检索:FCTH(Fuzzy Color and Texture Histogram)算法
查看>>
Darwin Streaming Server 安装流程
查看>>
c++ 函数的签名、参数的类型
查看>>
写给五个月之后的自己
查看>>