什么是队列,是先进先出的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端进行插入操作,在前端进行删除操作。

看看各语言实现队列的方法:

什么情况下会用了队列呢,并发请求又要保证事务的完整性的时候就会用到队列,当然不排除使用其它更好的方法。
队列还可以用于减轻数据库服务器压力,我们可以将不是即时数据放入到队列中,在数据库空闲的时候或者间隔一段时间后执行。比如发送邮件消息服务,没有必要即时的执行,在没有使用队列的时候sql语句是这样的
PHP实现队列:第一个元素作为队头,最后一个元素作为队尾
<?php
/**
* 队列就是这么简单
*
*/
$array = array('PHP', 'JAVA');
array_push($array, 'PYTHON'); //入队列
array_shift($array); //出队列什么是双端队列(或双向队列)Deque,全名double-ended queue?
即元素可以在队列的任意一段入队或出队,如果我们把这些方法叫做insertLeft()和insertRight(),以及removeLeft()和removeRight()。如果严格禁止调用insertLeft()和removeLeft()方法(或禁用右段的操作),双端队列功能就和栈一样。禁止调用insertLeft()和removeRight()(或相反的另一对方法),它的功能就和队列一样了。双端队列与栈或队列相比,是一种多用途的数据结构。
参考资料:http://blog.csdn.net/woshihaiyong168/article/details/52846205
<?php/*
* PHP实现队列操作类
*/class queueOp {
/*
* 队尾入队
* Return:处理之后队列的元素个数
*/
public function tailEnqueue($arr,$val) {
return array_push($arr,$val);
} /*
* 队尾出队
* Return:最后一个值,如果数组为空或不是数组,返回NULL
* Comment:仅用于双向队列
*/
public function tailDequeue($arr) {
return array_pop($arr);
} /*
* 队首入队
* Return:处理之后队列的元素个数
* Comment:仅用于双向队列
*/
public function headEnqueue($arr,$val) {
return array_unshift($arr,$val);
} /*
* 队首出队
* Return:移出的值,如果参数不是数组或数组为空,返回NULL
*/
public function headDequeue($arr) {
return array_shift($arr);
} /*
* 队列长度
* Return:返回队列的长度(元素个数)
*/
public function queueLength($arr) {
return count($arr);
} /*
* 获取队首元素
* Return:第一个元素的值,如果队列为空则返回FALSE
*/
public function queueHead($arr) {
return reset($arr);
} /*
* 获取队尾元素
* Return:最后一个元素的值,如果队列为空则返回FALSE
*/
public function queueTail($arr) {
return end($arr);
} /*
* 清空队列
* Return:无返回值
*/
public function clearQueue($arr) {
unset($arr);
}
}栈
栈(stack)与队列相似,都是操作受到了限制的表,不同的是栈实行的是先入后出的原则,先进入的元素会被压到栈底,后进入的元素位于栈顶,栈只会对栈顶一端的元素进行操作,栈的操作包括入栈和出栈,都是从栈顶端进行操作。
PHP实现栈与实现队列极其相似,了解了栈的原理之后,只需要将队列部份的类实现代码去除队列头部的插入与删除操作,即可成为栈的操作类,只需将队尾换成栈顶,队首换成栈底即可。
参考地址:http://blog.csdn.net/ljl890705/article/details/50380291
PHP和MySQL实现消息队列
参考地址:http://www.cnblogs.com/chunguang/p/5757304.html
PHP的轻量消息队列php-resque使用说明
参考资料:http://avnpc.com/pages/run-background-task-by-php-resque