PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例队列这种数据结构更简单,就像我们生活中排队一样 , 它的特性是先进先出(FIFO) 。
PHP
SPL中SplQueue类就是实现队列操作 , 和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现 。
SplQueue类摘要如下:
SplQueue简单使用如下:
复制代码
代码如下:
$queue
=
new
SplQueue();
/**
*
可见队列和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为:
*
(1)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_KEEP
(默认值,迭代后数据保存)
*
(2)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE
(迭代后数据删除)
*/
$queue-setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE);
//SplQueue::enqueue()其实就是
SplDoublyLinkedList::push()
$queue-enqueue('a');
$queue-enqueue('b');
$queue-enqueue('c');
//SplQueue::dequeue()其实就是
SplDoublyLinkedList::shift()
print_r($queue-dequeue());
foreach($queue
as
$item)
{
echo
$item
.
PHP_EOL;
}
print_r($queue);
而优先队列SplPriorityQueue是基于堆(后文介绍)实现的 。
SplPriorityQueue的类摘要如下:
SplPriorityQueue简单使用:
$pq
=
new
SplPriorityQueue();
$pq-insert('a',
10);
$pq-insert('b',
1);
$pq-insert('c',
8);
echo
$pq-count()
.PHP_EOL;
//3
echo
$pq-current()
.
PHP_EOL;
//a
/**
*
设置元素出队模式
*
SplPriorityQueue::EXTR_DATA
仅提取值
*
SplPriorityQueue::EXTR_PRIORITY
仅提取优先级
*
SplPriorityQueue::EXTR_BOTH
提取数组包含值和优先级
*/
$pq-setExtractFlags(SplPriorityQueue::EXTR_DATA);
while($pq-valid())
{
print_r($pq-current());
//a
c
b
$pq-next();
}
大型的PHP应用,通常使用什么应用做消息队列?一、消息队列概述
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 。实现高性能,高可用,可伸缩和最终一致性架构 。是大型分布式系统不可缺少的中间件 。
目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ , RocketMQ等 。
二、消息队列应用场景
以下介绍消息队列在实际应用中常用的使用场景 。异步处理 , 应用解耦,流量削锋和消息通讯四个场景 。
2.1异步处理
场景说明:用户注册后,需要发注册邮件和注册短信 。传统的做法有两种1.串行的方式;2.并行方式 。
(1)串行方式:将注册信息写入数据库成功后 , 发送注册邮件,再发送注册短信 。以上三个任务全部完成后,返回给客户端 。(架构KKQ:466097527,欢迎加入)
(2)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信 。以上三个任务完成后,返回给客户端 。与串行的差别是,并行的方式可以提高处理的时间 。
假设三个业务节点每个使用50毫秒钟 , 不考虑网络等其他开销,则串行方式的时间是150毫秒 , 并行的时间可能是100毫秒 。
因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次 。则串行方式1秒内CPU可处理的请求量是7次(1000/150) 。并行方式处理的请求量是10次(1000/100) 。
推荐阅读
- 包含xml怎么变成PPT的词条
- 穷人拍摄视频怕什么,穷人生活视频剪辑
- 洋人的玩具叫什么视频,洋人的玩具叫什么视频软件
- python打靶法函数 用python打
- 为什么电视上都要加配乐,为什么电视剧要有背景音乐
- asp.net导入js文件找不到文件,aspnet js调用c#
- 海外手机直播平台,海外直播软件有哪些好看
- 问卷调查代码java 问卷调查代码html
- 短视频剪辑拍摄器材是什么,短视频拍摄利器