关于的队列的介绍,我这里就不多讲了,随便百度一下都很多

用过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吧,由于笔者水平有限,不对的地方还望指正;谢谢

转载于:https://www.cnblogs.com/xiaozong/p/5668174.html

PHP实现队列的原理相关推荐

  1. 并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究

    并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究 http://www.importnew.com/25668.html 一. 前言 常用的并发队列有阻塞队列和非阻塞队列 ...

  2. JUC多线程:AQS抽象队列同步器原理

    一.AQS 的工作原理: 1.1.什么是 AQS: AQS,Abstract Queued Synchronizer,抽象队列同步器,是 J.U.C 中实现锁及同步组件的基础.工作原理就是如果被请求的 ...

  3. 消息队列NetMQ 原理分析2-IO线程和完成端口

    目录 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket IOObject 总结 前言 介绍 [NetMQ](https://github.c ...

  4. AQS抽象队列同步器原理详解

    系列文章目录 第一节 synchronized关键字详解-偏向锁.轻量级锁.偏向锁.重量级锁.自旋.锁粗化.锁消除 AQS抽象队列同步器原理详解 系列文章目录 前言 一.AQS特性 二.AQS原理 1 ...

  5. 数据结构——环形队列的原理(模拟环形队列)

    数据结构--环形队列的原理(模拟环形队列) 知识点简要介绍: 队列:一种特殊的线性表,包含队列头.队列尾,只允许在队列头进行删除操作,在队列为进行删除操作 分类:     顺序队列.循环队列(环形队列 ...

  6. 原理剖析(第 012 篇)Netty之无锁队列MpscUnboundedArrayQueue原理分析

    原理剖析(第 012 篇)Netty之无锁队列MpscUnboundedArrayQueue原理分析 - 一.大致介绍 1.了解过netty原理的童鞋,其实应该知道工作线程组的每个子线程都维护了一个任 ...

  7. RTOS中的消息队列的原理以及应用

    消息队列的原理 RTOS中的消息队列是一种用于任务间通信的机制,它可以实现任务之间的异步通信,从而实现任务间的解耦.消息队列是一个先进先出的数据结构,任务可以向队列中发送消息,也可以从队列中接收消息. ...

  8. RabbitMQ镜像队列实现原理

    一.镜像队列使用 1.镜像队列作用 ​ RabbitMQ默认集群模式,并不包管队列的高可用性,尽管队列信息,交换机.绑定这些可以复制到集群里的任何一个节点,然则队列内容不会复制,固然该模式解决一项目组 ...

  9. ZMQ无锁队列的原理与实现

    ZMQ无锁队列的原理与实现 前言 1. 为什么需要⽆锁队列 2. 无锁队列的实现(参考zmq,只支持一写一读的场景) 2.1 无锁队列前言 2.2 原⼦操作函数介绍 2.3 yqueue_t的chun ...

最新文章

  1. 两种ICP的改进算法:PLICP与NICP
  2. dsp广告和信息流广告区别_一文搞懂DSP-蘑菇街DSP广告实践
  3. python逻辑运算(not、and、or)总结_python逻辑判断 () not and or
  4. makefile之目标与依赖(1)
  5. dell 重装linux系统_U盘装系统开机按哪个键
  6. python进阶12并发之八多线程与数据同步
  7. mybatis 批量插入的两种方式
  8. IDC带宽测试几款软件(Multiping pingPlotter TracertGUI )
  9. python微信图标制作_Python帮你微信头像任意添加装饰,别再@微信官方了!
  10. 七牛云 转码_七牛云4:上传后自动添加水印、视频转码
  11. 备受关注的个税法进行第七次大型结构调整,你受益有多少?
  12. win32,win64编程永恒;语言编程需要注意的64位
  13. Typora超级纯净免费记笔记软件分享给大家
  14. 环境变量setenv函数和export命令的解释
  15. (励志)(转载) 在华为的十年
  16. 计算机存储单位和网速单位换算,数据速度计算:在线进行网速各种bps mbps kbps B/秒 KB/秒 MB/秒单位之间换算...
  17. Android平板app开发布局文件,Android平板开发相关
  18. Hexo系列(五) 撰写文章
  19. JSP技术【应用】快速查询
  20. 怎样用php打印杨辉三角,php打印杨辉三角小例子

热门文章

  1. 大地坐标的概念 大地坐标系的举例和说明分类
  2. Service Manager 的系统要求
  3. 程序员远程办公_如何从办公室变成远程程序员
  4. linux内核功能有,好消息!LINUX内核2.6.18终于支持实时功能了
  5. JavaScript 定义类时如何将方法提取出来
  6. apply()智用:需要几个参数但只有一个参数数组
  7. APP测试和传统软件测试有什么区别?
  8. Java培训学习步骤有哪些
  9. 连接服务器_命令行连接FTP服务器
  10. Proximal Algorithms 4 Algorithms