PHP实现队列的原理
关于的队列的介绍,我这里就不多讲了,随便百度一下都很多
用过laravel框架的童鞋都知道其自带队列功能,之前我很费解,PHP只是一个脚本,有超时机制
为什么能不停的去执行队列呢?
带着这个问题,在网上找了一下相关的介绍,这里我没有研究透laravel的队列,而且用这么高大上的实例来给大家讲,我估计自己都云里雾里
所以我就其原理说明一下
我们新建一个文件queue
<?php
while(true){
echo 1;
sleep(1);
}
然后中 命令行里面 执行 php queue
你会发现每秒钟输出一个1;等了很久,咦,很神奇,为什么php没有超时呢?
对,就是不会超时,Why?
答:实际上PHP执行脚本是不会超时的,我们在网页中看到的诸如504等超时,是由Apache,Nginx,PHP配置文件设置的超时时间决定的,因为PHP命令行执行文件没有使用PHP配置文件,所以默认是不超时的。
ps -ef|grep php
会发现有一个 php queue进程
php超时的疑惑我们解决了
再来看一下队列的原理
新建一个文件 artisan
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
while(1){
$res = $redis->lpop('listname');
if($res){echo $res."\r\n";}
sleep(1);
}
然后php artisan 执行队列
我们来新建一个窗口,进入redis客户端输入以下命令【不会redis的可以在我的博客中找相关资料】
lpush listname a b c d e f g
会发现php artisan这个队列会不断的把redis里我刚刚push进去的值打出来
其实laravel的队列就是这个原理,只不过,它不仅支持redis作为载体,还可以使用其他更多的数据库
有人就要问了,我这php artisan启动了,如果我把窗口关了不就没用了吗,
不不不,Linux 还是可以在后台运行的
只要在命令后面加个 &
php artisan &
就可以啦
这些是PHP队列的基本原理,当然我们还可以去执行对象的队列及更复杂的情况,更多的请研究Laravel吧,由于笔者水平有限,不对的地方还望指正;谢谢
PHP实现队列的原理的更多相关文章
- 消息队列NetMQ 原理分析1-Context和ZObject
前言 介绍 NetMQ是ZeroMQ的C#移植版本,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. 当前有2个版本正在维护,版本3 ...
- 消息队列NetMQ 原理分析2-IO线程和完成端口
消息队列NetMQ 原理分析2-IO线程和完成端口 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket 获取超时时间 从完成端口获取处理完的状 ...
- 消息队列NetMQ 原理分析3-命令产生/处理和回收线程
消息队列NetMQ 原理分析3-命令产生/处理和回收线程 前言 介绍 目的 命令 命令结构 命令产生 命令处理 创建Socket(SocketBase) 创建连接 创建绑定 回收线程 释放Socket ...
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe
消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Socket 接口实现 内部结构 Session Option Pipe YPipe Msg Y ...
- 消息队列NetMQ 原理分析5-StreamEngine、Encord和Decord
消息队列NetMQ 原理分析5-StreamEngine,Encord和Decord 前言 介绍 目的 StreamEngine 发送数据 接收数据 流程分析 Encoder V2Encoder V1 ...
- Netty构建分布式消息队列实现原理浅析
在本人的上一篇博客文章:Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇 中,重点向大家介绍了AvatarMQ主要构成模块以及目前存在的优缺点.最后以一个生产者.消费者传递消息的例子, ...
- 【转载】socket 的 connect、listen、accept 和全连接队列、半连接队列的原理
转自:http://blog.csdn.net/tennysonsky/article/details/45621341 写在前面: 1. accept 只是从全连接队列拿出一个已经建立好的socke ...
- 并发队列 – 有界阻塞队列 ArrayBlockingQueue 原理探究
一.ArrayBlockingQueue类图结构 如图ArrayBlockingQueue内部有个数组items用来存放队列元素,putindex下标标示入队元素下标,takeIndex是出队下标,c ...
- redis作为消息队列的原理
Redis队列功能介绍 List 转:https://blog.csdn.net/cestlavieqiang/article/details/84197736 常用命令: Blpop删除,并获得该列 ...
随机推荐
- 在Ubuntu 14.04安装 Let’s Encrypt并配置ssl
1.下载安装 Let's Encrypt客户端 cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto 2.添加执行权限 sudo c ...
- 转:JMeter 参数化之利用JDBC Connection Configuration从数据库读取数据并关联变量
1. 下载mysql jar包 下载mysql jar包 http://dev.mysql.com/downloads/connector/j/ 网盘下载地址:mysql-connector-ja ...
- Linux增加swap分区大小
1. 查看当前分区情况 free -m 2. 增加 swap 大小, 2G 左右 dd if=/dev/zero of=/var/swap bs=1024 count=2048000 3. 设置交换文 ...
- MySQL字段自增自减的SQL语句
MySQL的自增语句大家应该都很熟悉 也很简单 update `info` set `comments` = `comments`+1 WHERE `id` = 32 这样就可以了,但是有时候我们会涉 ...
- hdu1010
#include <stdio.h>#include <string.h>#include <math.h> int n,m,t;char map[10][10]; ...
- mysql 取出的日期数据缺少时分秒
项目使用的数据库是mysql 持久层框架是hibernate 利用SQLQuery 获取日期的时候缺少时分秒 将 .addScalar("dealTS",StandardB ...
- Maxmum subsequence sum problem
We have a lot of ways to solve the maximum subsequence sum problem, but different ways take differen ...
- Django中的权限系统
Django中已经为我们设置好了基本的权限系统,在定义好model同步数据库后,在每个库下面都会有一张 'auth_permission' 表.该表里面记录了每条权限的描述(name字段,can do ...
- 丢掉鼠标-Mac神软Alfred使用手册
上篇: http://wellsnake.com/jekyll/update/2014/06/15/001/?utm_source=tuicool 下篇: http://wellsnake.com/j ...
- sql分页带参数,带排序等,动态实现的方法
USE [YQOBS] GO /****** Object: StoredProcedure [dbo].[PageList] Script Date: 11/06/2014 11:39:35 *** ...